• 一组PHP可逆加密解密算法


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

    对于需要还原的信息,则需要采用可逆的加密解密算法。
    下面一组PHP函数是实现此加密解密的方法:

    加密算法如下:

     1 function encrypt($data, $key)
     2 {
     3     $key    =    md5($key);
     4     $x        =    0;
     5     $len    =    strlen($data);
     6     $l        =    strlen($key);
     7     for ($i = 0; $i < $len; $i++)
     8     {
     9         if ($x == $l) 
    10         {
    11             $x = 0;
    12         }
    13         $char .= $key{$x};
    14         $x++;
    15     }
    16     for ($i = 0; $i < $len; $i++)
    17     {
    18         $str .= chr(ord($data{$i}) + (ord($char{$i})) % 256);
    19     }
    20     return base64_encode($str);
    21 }

    解密算法如下:

     1 function decrypt($data, $key)
     2 {
     3     $key = md5($key);
     4     $x = 0;
     5     $data = base64_decode($data);
     6     $len = strlen($data);
     7     $l = strlen($key);
     8     for ($i = 0; $i < $len; $i++)
     9     {
    10         if ($x == $l) 
    11         {
    12             $x = 0;
    13         }
    14         $char .= substr($key, $x, 1);
    15         $x++;
    16     }
    17     for ($i = 0; $i < $len; $i++)
    18     {
    19         if (ord(substr($data, $i, 1)) < ord(substr($char, $i, 1)))
    20         {
    21             $str .= chr((ord(substr($data, $i, 1)) + 256) - ord(substr($char, $i, 1)));
    22         }
    23         else
    24         {
    25             $str .= chr(ord(substr($data, $i, 1)) - ord(substr($char, $i, 1)));
    26         }
    27     }
    28     return $str;
    29 }

    上述加密解密的过程均需要用到一个加密密钥(即参数$key)。

    1 $data = 'PHP加密解密算法';    // 被加密信息
    2 $key = '123';    // 密钥
    3 $encrypt = encrypt($data, $key);
    4 $decrypt = decrypt($encrypt, $key);
    5 echo $encrypt, "
    ", $decrypt;

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

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

  • 相关阅读:
    利用读写锁实现缓存系统
    POJ 1338 Ugly Numbers
    copy算法
    它们的定义iOS双击Home截图按键开关
    以正能量的点!!!
    该公路项目
    ArcSDE当关系查询ArcMap与REST查询结果不一致问题的解决
    【OpenCV新手教程第14】OpenCVHough变换:霍夫变换线,霍夫变换圆汇编
    为了树莓派IIraspberrypi安装emacs+ecb+cedet+session+color-theme+cscope+linum
    事件总线帧---Otto
  • 原文地址:https://www.cnblogs.com/zqifa/p/php-6.html
Copyright © 2020-2023  润新知