Heim >Backend-Entwicklung >PHP-Tutorial >UCenter的可逆加密函数authcode

UCenter的可逆加密函数authcode

WBOY
WBOYOriginal
2016-07-25 08:59:04886Durchsuche
  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 $rndkey[$i] = ord($cryptkey[$i % $key_length]);
  19. }
  20. for($j = $i = 0; $i $j = ($j + $box[$i] + $rndkey[$i]) % 256;

  21. $tmp = $box[$i];
  22. $box[$i] = $box[$j];
  23. $box[$j] = $tmp;
  24. }
  25. for($a = $j = $i = 0; $i $a = ($a + 1) % 256;

  26. $j = ($j + $box[$a]) % 256;
  27. $tmp = $box[$a];
  28. $box[$a] = $box[$j];
  29. $box[$j] = $tmp;
  30. $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));
  31. }
  32. if($operation == 'DECODE') {

  33. if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) {
  34. return substr($result, 26);
  35. } else {
  36. return '';
  37. }
  38. } else {
  39. return $keyc.str_replace('=', '', base64_encode($result));
  40. }
  41. }
  42. //调用示例

  43. $string = authcode("Hello","ENCODE","HTML_TCCJ_AUTH");
  44. echo $string,'
    ';
  45. echo authcode($string,"DECODE","HTML_TCCJ_AUTH"),'
    ';
  46. ?>
复制代码


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn