• 技术文章 >后端开发 >php教程

    UCenter的可逆加密函数authcode

    2016-07-25 08:59:04原创411
    1. //可逆的加密函数

    2. function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) {

    3. $ckey_length = 4; // 随机密钥长度 取值 0-32;

    4. // 加入随机密钥,可以令密文无任何规律,即便是原文和密钥完全相同,加密结果也会每次不同,增大破解难度。
    5. // 取值越大,密文变动规律越大,密文变化 = 16 的 $ckey_length 次方
    6. // 当此值为 0 时,则不产生随机密钥
    7. $key = md5($key ? $key : UC_KEY);
    8. $keya = md5(substr($key, 0, 16));
    9. $keyb = md5(substr($key, 16, 16));
    10. $keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : '';

    11. $cryptkey = $keya.md5($keya.$keyc);

    12. $key_length = strlen($cryptkey);

    13. $string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string;

    14. $string_length = strlen($string);

    15. $result = '';

    16. $box = range(0, 255);

    17. $rndkey = array();

    18. for($i = 0; $i <= 255; $i++) {
    19. $rndkey[$i] = ord($cryptkey[$i % $key_length]);
    20. }

    21. for($j = $i = 0; $i < 256; $i++) {

    22. $j = ($j + $box[$i] + $rndkey[$i]) % 256;
    23. $tmp = $box[$i];
    24. $box[$i] = $box[$j];
    25. $box[$j] = $tmp;
    26. }

    27. for($a = $j = $i = 0; $i < $string_length; $i++) {

    28. $a = ($a + 1) % 256;
    29. $j = ($j + $box[$a]) % 256;
    30. $tmp = $box[$a];
    31. $box[$a] = $box[$j];
    32. $box[$j] = $tmp;
    33. $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));
    34. }

    35. if($operation == 'DECODE') {

    36. if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) {
    37. return substr($result, 26);
    38. } else {
    39. return '';
    40. }
    41. } else {
    42. return $keyc.str_replace('=', '', base64_encode($result));
    43. }
    44. }

    45. //调用示例

    46. $string = authcode("Hello","ENCODE","HTML_TCCJ_AUTH");
    47. echo $string,'
      ';
    48. echo authcode($string,"DECODE","HTML_TCCJ_AUTH"),'
      ';
    49. ?>

    复制代码
    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:UCenter的可逆加密函数authcode
    上一篇:php自定义大小验证码的实例代码 下一篇:php计数器的简单代码举例
    20期PHP线上班

    相关文章推荐

    精选22门好课,价值3725元,开通VIP免费学习!• php中利用反照访问类私有方法• PHP中对缓冲区的统制实现代码• (高分)为何这段代码不能实现文件下载• 10位一等PHP大师的开发原则• PHP开发惯用函数和必须会的函数总结 -带例子
    1/1

    PHP中文网