1/**
2 * @param string $string オリジナルtext または暗号文
3 * @param string $operation 操作 (ENCODE | DECODE)、デフォルトは DECODE です
4 * @param string $key key
5 * @param int $ expiry 暗号文の有効期間、暗号化されたときに有効、単位は秒、0 は永続的な有効性を意味します
6 * @return string 処理された元のテキスト、または Base64_encode によって処理された暗号文
7 *
8
* , 'DECODE', 'key'); // $b(abc)12
; 14*$ B = 認証コード ('ABC', 'デコード', 'キー'); 1時間以内、$ b (abc)、それ以外の場合、$ bは空です、
$オペレーション
=
'DECODE
' " 3600) {
17 18
ランダムなキーの長さの値 0- 32;20 元のテキストとキーがまったく同じであっても、暗号化結果が不規則になる可能性があります。毎回異なるため、クラックがより困難になります。
21 // 取值越大,密文变动规律越大,密文变化 = 16 的 $ckey_length 次方
22 // 当此值为 0 时,则不产生随机密钥
23
24 $key = md5($key ? $key : 'default_key'); //这里可以填写默认key值
25 $keya = md5(substr($key 、 0、 16 ));
26 $keyb = md5(substr( $key、 16、 16));
27 $keyc = $ckey_length ? ($オペレーション == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : '';
28
29 $cryptkey = $keya.md5 ($keya.$keyc);
30 $key_length = strlen($cryptkey);
31
32 $string = $operation == 'DEコード' ? base64_decode( substr($string, $ckey_length)) : sprintf(' %010d'、 $有効期限 ? $有効期限 + 時間() : 0 ).substr( md5($string.$keyb), 0, 16) .$string;
33 $string_length = strlen($string);
34
35 $結果 = '';
36 $box = 範囲(0) 、 255);
37
38 $rndkey = array();
39 for($i = 0; $i 255; ++) {
40 $rndkey[$i] = ord($cryptkey[$i % $key_length]);
41 }
42
43 for($j = $i = 0; $i 256; $i++) {
44 $j = ($j + $box[$i] + $rndkey[$i]) % 256;
45 $tmp = $box[$i];
4 6 $box[$i] ] = $box[$j];
47 $box[ $j] = $tmp ;
48 }
49
50 for($a = $j = $i = 0; $i $string_length; $i++) {
51 $a = ($a + 1) % 256;
52 $j = ($j + $box[$a]) % 256;
53 $tmp = $box[$a];
54 $box[$a ] = $box [$j];
55 $box[$j] = $tmp;56 $result .= chr(注文($string [$i]) ^ ( $box[($box[$a] + $box[$j]) % 256 ]));
57 }
58
59 if($operation == ' デコード') {
60 if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - 時間() > 0) && substr($result, 10, 16 ) == substr( md5(substr($result, 26).$keyb) 、 0、 16)) {
61 return substr($result, 26);
62 } else {
63 return '';
64 }
65 }else
'=', '' ,base64_encode($result ));6769 }
2010/6/4 24 行のエラーを修正しました。このエラーを報告してくれた Datang Show に感謝します