一组PHP可逆加密解密算法实例代码

 更新时间:2014年01月21日 18:00:44   作者:  
这篇文章主要介绍了一组PHP可逆加密解密算法实例代码,有需要的朋友可以参考一下

对于大部分密码加密,我们可以采用md5、sha1等方法。可以有效防止数据泄露,但是这些方法仅适用于无需还原的数据加密。

对于需要还原的信息,则需要采用可逆的加密解密算法。

下面一组PHP函数是实现此加密解密的方法:

加密算法如下:

复制代码 代码如下:

function encrypt($data, $key)
{
 $key = md5($key);
    $x  = 0;
    $len = strlen($data);
    $l  = strlen($key);
    for ($i = 0; $i < $len; $i++)
    {
        if ($x == $l)
        {
         $x = 0;
        }
        $char .= $key{$x};
        $x++;
    }
    for ($i = 0; $i < $len; $i++)
    {
        $str .= chr(ord($data{$i}) + (ord($char{$i})) % 256);
    }
    return base64_encode($str);
}

解密算法如下:
复制代码 代码如下:

function decrypt($data, $key)
{
 $key = md5($key);
    $x = 0;
    $data = base64_decode($data);
    $len = strlen($data);
    $l = strlen($key);
    for ($i = 0; $i < $len; $i++)
    {
        if ($x == $l)
        {
         $x = 0;
        }
        $char .= substr($key, $x, 1);
        $x++;
    }
    for ($i = 0; $i < $len; $i++)
    {
        if (ord(substr($data, $i, 1)) < ord(substr($char, $i, 1)))
        {
            $str .= chr((ord(substr($data, $i, 1)) + 256) - ord(substr($char, $i, 1)));
        }
        else
        {
            $str .= chr(ord(substr($data, $i, 1)) - ord(substr($char, $i, 1)));
        }
    }
    return $str;
}

上述加密解密的过程均需要用到一个加密密钥(即参数$key)。
复制代码 代码如下:

$data = 'PHP加密解密算法';  // 被加密信息
$key = '123';     // 密钥
$encrypt = encrypt($data, $key);
$decrypt = decrypt($encrypt, $key);
echo $encrypt, "\n", $decrypt;

上述将输出类似如下结果:

gniCSOzZG+HnS9zcFea7SefNGhXF
PHP加密解密算法

从上述结果可以看出,这是一组可逆的加密解密算法,可以用于部分需要还原的数据加密。

相关文章

  • 如何让CI框架支持service层

    如何让CI框架支持service层

    本文主要介绍了在controller和model中加一个业务层service,由它来负责业务逻辑,封装好的调用接口可以被controller复用,提高了通用的业务逻辑的复用性,设计到具体业务实现会调用Model的接口。
    2014-10-10
  • 微信公众号支付之坑:调用支付jsapi缺少参数 timeStamp等错误解决方法

    微信公众号支付之坑:调用支付jsapi缺少参数 timeStamp等错误解决方法

    这段时间一直比较忙,一忙起来真感觉自己就只是一台挣钱的机器了(说的好像能挣到多少钱似的,呵呵);这会难得有点儿空闲时间,想把前段时间开发微信公众号支付遇到问题及解决方法跟大家分享下,这些“暗坑”能不掉就不掉吧,要不然关键时刻出问题,真是让人急的焦头烂额
    2016-01-01
  • PHP的openssl加密扩展使用小结(推荐)

    PHP的openssl加密扩展使用小结(推荐)

    下面小编就为大家带来一篇PHP的openssl加密扩展使用小结(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-07-07
  • Laravel 5.4前后台分离,通过不同的二级域名访问方法

    Laravel 5.4前后台分离,通过不同的二级域名访问方法

    今天小编就为大家分享一篇Laravel 5.4前后台分离,通过不同的二级域名访问方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10
  • Yii调试SQL的常用方法

    Yii调试SQL的常用方法

    这篇文章主要介绍了Yii调试SQL的常用方法,需要的朋友可以参考下
    2014-07-07
  • 常用的php图片处理类(水印、等比缩放、固定高宽)分享

    常用的php图片处理类(水印、等比缩放、固定高宽)分享

    这篇文章主要汇总介绍了两个常用的php图片处理类(水印、等比缩放、固定高宽),非常的简单实用,有需要的小伙伴可以参考下
    2015-06-06
  • php-fpm服务启动脚本的方法

    php-fpm服务启动脚本的方法

    这篇文章主要介绍了php-fpm服务启动脚本的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2018-04-04
  • PHP laravel中的多对多关系实例详解

    PHP laravel中的多对多关系实例详解

    数据表之间是纵横交叉、相互关联的,laravel的一对一,一对多比较好理解,本文重点通过实例给大家讲解 laravel中的多对多关系,感兴趣的朋友一起看看吧
    2017-06-06
  • thinkphp判断访客为手机端或PC端的方法

    thinkphp判断访客为手机端或PC端的方法

    这篇文章主要介绍了thinkphp判断访客为手机端或PC端的方法,通过获取用户$_SERVER['HTTP_USER_AGENT']信息后,再针对数组的遍历与匹配来判断访客类型,是非常实用的技巧,需要的朋友可以参考下
    2014-11-11
  • thinkphp5.1框架模板赋值与变量输出示例

    thinkphp5.1框架模板赋值与变量输出示例

    这篇文章主要介绍了thinkphp5.1框架模板赋值与变量输出,结合实例形式分析了thinkphp5.1框架模板赋值与变量输出基本操作技巧及相关注意事项,需要的朋友可以参考下
    2020-05-05

最新评论