PHP可逆加密解密算法程序代码

我们常用的md5算法从理论上来讲是不可逆的,但是有强大的方法还是可以把md5给算出来,只是根据复杂程度需要的时间不同罢了,但有时我们希望自己数据加密传输之后接受可以解密了,下面我来给大家提供一个函数.

对于大部分密码加密,我们可以采用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. }//开源代码phpfensi.com
  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, "n", $decrypt;
  6. //上述将输出类似如下结果:
  7. //gniCSOzZG+HnS9zcFea7SefNGhXF

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