rinald_未来往事

PHP随机可逆加密解密函数

PHP
这里假设加密解密函数文件为:encrypt.function.php:
  1. //加密函数  
  2. function passport_encrypt($txt$key) {  
  3.   srand((double)microtime() * 1000000);  
  4.   $encrypt_key = md5(rand(0, 32000));  //生成随机数字并md5的key   
  5.   $ctr = 0;  
  6.   $tmp = '';  
  7.   for($i = 0;$i < strlen($txt); $i++) { //将随机key长度与原文长度一样  
  8.     $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;   
  9.     $tmp .= $encrypt_key[$ctr] . ($txt[$i] ^ $encrypt_key[$ctr++]); // 随机key + 随机key和密文按位或运算的字符串 隔一位插入随机key  
  10.   }  
  11.   return base64_encode(passport_key($tmp$key)); //再次使用 $key 和 $tmp 再次按位或运算 并返回base64数据  
  12. }  
  13. //解密函数  
  14. function passport_decrypt($txt$key) {  
  15.   $txt = passport_key(base64_decode($txt), $key); //先base64解码 再按位或解密  
  16.   $tmp = '';  
  17.   for($i = 0;$i < strlen($txt); $i++) {  
  18.     $md5 = $txt[$i];  
  19.     $tmp .= $txt[++$i] ^ $md5;  //按位或解密  
  20.   }  
  21.   return $tmp;  
  22. }  
  23. //密钥运算  
  24. function passport_key($txt$encrypt_key) {  
  25.   $encrypt_key = md5($encrypt_key);  
  26.   $ctr = 0;  
  27.   $tmp = '';  
  28.   for($i = 0; $i < strlen($txt); $i++) { //按位或加密过程,同上  
  29.     $ctr = $ctr == strlen($encrypt_key) ? 0 : $ctr;  
  30.     $tmp .= $txt[$i] ^ $encrypt_key[$ctr++];  //  
  31.   }  
  32.   return $tmp;  
  33. }  

使用示例:

输出结果如下(注意$entxt为随机加密,输出结果会有不同):
CTMCblM4UTBVeAE1UWwEdFUvBCgPN1Y9
fity.cn
原文作者:rinald
原文地址:http://fity.cn/post/440.html
互联网技术更新较快,本站很多文章具有实效性,我会及时更新原文,但转载的文章无法通知更新。为了不给读者造成困惑或误导,请您在转载时保留此出处信息,尊重别人也是尊重自己。

发表评论

必填

选填

选填

必填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。