ホームページ >php教程 >php手册 >素晴らしいPHP文字列暗号化機能

素晴らしいPHP文字列暗号化機能

WBOY
WBOYオリジナル
2016-07-11 20:00:391114ブラウズ

最近、discuz の優れた暗号化および復号化機能を発見しました。

この関数の素晴らしい点は、は指定された時間内に文字列を暗号化して復元でき、タイムアウト後には復元できないことですオリジナル

このようにして、この関数は多くの用途に使用できます目的: シングルポイント ログイントークンは暗号化されて送信され、一時パスワードはetc.

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 に感謝します
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。