php加密算法之实现可逆加密算法和解密分享

 更新时间:2014年01月21日 13:38:43   作者:  
对于大部分密码加密,我们可以采用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加密解密算法

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

相关文章

  • 浅谈php数组array_change_key_case() 函数和array_chunk()函数

    浅谈php数组array_change_key_case() 函数和array_chunk()函数

    下面小编就为大家带来一篇浅谈php数组array_change_key_case() 函数和array_chunk()函数。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10
  • php生成短网址示例

    php生成短网址示例

    这篇文章主要介绍了php生成短网址示例,需要的朋友可以参考下
    2014-05-05
  • 告诉你如何破解PHP单继承魔咒

    告诉你如何破解PHP单继承魔咒

    这篇文章主要给大家介绍了关于如何破解PHP单继承魔咒的相关资料,Trait 是为类似 php 的单继承语言而准备的一种代码复用机制,文中通过图文以及实例代码介绍的非常详细,需要的朋友可以参考下
    2022-02-02
  • PHP水印类,支持添加图片、文字、填充颜色区域的实现

    PHP水印类,支持添加图片、文字、填充颜色区域的实现

    下面小编就为大家带来一篇PHP水印类,支持添加图片、文字、填充颜色区域的实现。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • jQuery向下滚动即时加载内容实现的瀑布流效果

    jQuery向下滚动即时加载内容实现的瀑布流效果

    下拉滚动条或鼠标滚轮滚动到页面底部时, 动态即时加载新内容,通过本文给大家介绍jQuery向下滚动即时加载内容实现的瀑布流效果,感兴趣的朋友参考下
    2016-01-01
  • PHP利用超级全局变量$_GET来接收表单数据的实例

    PHP利用超级全局变量$_GET来接收表单数据的实例

    下面小编就为大家带来一篇PHP利用超级全局变量$_GET来接收表单数据的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11
  • tp5.0框架隐藏index.php入口文件及模块和控制器的方法分析

    tp5.0框架隐藏index.php入口文件及模块和控制器的方法分析

    这篇文章主要介绍了tp5.0框架隐藏index.php入口文件及模块和控制器的方法,结合实例形式分析thinkPHP5.0隐藏index.php入口文件及模块和控制器的具体配置方法、操作技巧与相关注意事项,需要的朋友可以参考下
    2020-02-02
  • PHP与jquery实时显示网站在线人数实例详解

    PHP与jquery实时显示网站在线人数实例详解

    在线人数最简单的就是直接利用js调用php了,这样可以显示出有多少人访问了本站,如果要在用户未刷新页面的状态实时显示用户在线人数,我们可以利用jquery ajax来实现,需要的朋友可以参考下
    2016-12-12
  • php日历制作代码分享

    php日历制作代码分享

    这篇文章主要介绍了使用php制作的日历,下面有效果图,大家参考使用吧
    2014-01-01
  • laravel实现批量更新多条记录的方法示例

    laravel实现批量更新多条记录的方法示例

    最近在使用Laravel,想批量插入近千条数据,通过网上找到了相关的解决方法,所以下面这篇文章主要给大家介绍了关于laravel实现批量更新多条记录的相关资料,文中给出了详细的示例代码,需要的朋友们下面随着小编来一起学习学习吧。
    2017-10-10

最新评论