• PHP加密解密


     1 /*********************************************************************
     2     函数名称:encrypt
     3     函数作用:加密解密字符串
     4     使用方法:
     5     加密     :encrypt('str','E','inckey');
     6     解密     :encrypt('被加密过的字符串','D','inckey');
     7     参数说明:
     8     $string   :需要加密解密的字符串
     9     $operation:判断是加密还是解密:E:加密   D:解密
    10     $key      :加密的钥匙(密匙);
    11 *********************************************************************/ 12 function encrypt($string,$operation,$key='') 13 { 14 $key=md5($key); 15 $key_length=strlen($key); 16 $string=$operation=='D'?base64_decode($string):substr(md5($string.$key),0,8).$string; 17 $string_length=strlen($string); 18 $rndkey=$box=array(); 19 $result=''; 20 for($i=0;$i<=255;$i++) 21 { 22 $rndkey[$i]=ord($key[$i%$key_length]); 23 $box[$i]=$i; 24 } 25 for($j=$i=0;$i<256;$i++) 26 { 27 $j=($j+$box[$i]+$rndkey[$i])%256; 28 $tmp=$box[$i]; 29 $box[$i]=$box[$j]; 30 $box[$j]=$tmp; 31 } 32 for($a=$j=$i=0;$i<$string_length;$i++) 33 { 34 $a=($a+1)%256; 35 $j=($j+$box[$a])%256; 36 $tmp=$box[$a]; 37 $box[$a]=$box[$j]; 38 $box[$j]=$tmp; 39 $result.=chr(ord($string[$i])^($box[($box[$a]+$box[$j])%256])); 40 } 41 if($operation=='D') 42 { 43 if(substr($result,0,8)==substr(md5(substr($result,8).$key),0,8)) 44 { 45 return substr($result,8); 46 } 47 else 48 { 49 return''; 50 } 51 } 52 else 53 { 54 return str_replace('=','',base64_encode($result)); 55 } 56 }

    测试:

    1 $id = 132;
    2      
    3 $token = encrypt($id, 'E', 'a');
    4      
    5 echo '加密:'.encrypt($id, 'E', 'a');
    6 echo '<br />';
    7      
    8 echo '解密:'.encrypt($token, 'D', 'a');
  • 相关阅读:
    1289大鱼吃小鱼(STL中栈的应用)
    1347旋转字符串
    2133排队接水——优先队列
    7-37 整数分解为若干项之和(20 分)
    有一个VC的bug:非标准语法
    指针的一点点用法
    好久没写的博客_数组的长度等小问题
    解决strcmp的错误以及VS的快捷键
    输入流和注释
    VS出现异常?!和十进制转二进制比是小事
  • 原文地址:https://www.cnblogs.com/inc-is-include/p/5165513.html
Copyright © 2020-2023  润新知