/**
* $string 平文または暗号文
* $operation 暗号化 ENCODE または復号 DECODE
* $key キー
* $expiry キーの有効期間
*/
function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) {
// 動的キーの長さ、同じ平文は動的キーに依存して異なる暗号文を生成します
// ランダムなキーを追加すると、元のテキストとキーがまったく同じであっても暗号化結果が毎回異なり、解読の難易度が高まります。 。
// 値が大きいほど、暗号文の変更パターンが大きくなります。 暗号文の変更 = 16 の $ckey_length 乗
// この値が 0 の場合、ランダムなキーは生成されません
$ckey_length = 4;
/ /キー
// $GLOBALS['discuz_auth_key'] 必要に応じて変更できます
$key = md5($key ? $key : $GLOBALS['discuz_auth_key'])
// キー a は暗号化と復号化
$keya = md5(substr($key, 0, 16));
// キー b はデータの整合性検証に使用されます
$keyb = md5(substr($key, 16, 16));キー c は、生成された暗号文を変更するために使用されます
$keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), - $ckey_length)) : '';
// 操作に関係するキー
$cryptkey = $keya.md5($keya.$keyc);
$key_length = strlen($cryptkey);
// プレーンテキスト、最初の 10 桁 保存に使用ビット 10 から 26 は、復号化時にデータの整合性を検証するために使用されます。 $ckey_length ビットから始まります。これは、暗号文の前の $ckey_length ビットが、正しい復号化を保証するための動的キーを保存するためです
$string = $operation == 'DECODE' ?base64_decode(substr($string, $ckey_length)) : sprintf( '%010d ', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string;
$string_length = strlen($string);
$result = '' ;
$box = range(0, 255);
$rndkey = array();
// キーブックを生成
for($i = 0; $i <= 255; $i++) {
$ rndkey[ $i] = ord($cryptkey[$i % $key_length]);
}
// 固定アルゴリズムを使用してキーブックを破壊し、ランダム性を高めます。非常に複雑に見えますが、実際には、暗号文の強度
for($j = $i = 0; $i <256; $i++) {
$j = ($j + $box[$i] + $rndkey[$i]) % 256;
$tmp = $box[$i];
$box[$i] = $box[$j];
$box[$j] = $tmp;
}
// コア暗号化および復号化部分
for($ a = $j = $i = 0; $string_length; {
$a = ($a + 1) % 256;
$j = ($j + $box[$a]) 256;
$tmp = $box[$a];
$box[$a] = $box[$j];
$box[$j] = $tmp; $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256])); }
if ($ Operation == 'decode') {
// substr ($ result, 0, 10) == 0 検証データの有効性
// substr ($ result, 0, 10) -time () & gt; 0 検証 データの有効性
// substr($result, 10 、16)== substr(md5(substr($ result、26)。$ keyb)、0、16)データの整合性の検証26)。$ keyb)、0、16){
} else {
dyny {
}ダイナミックキーを暗号テキストに保存します。そのため、同じプレーンテキストを別の暗号テキストを作成した後に復号化できますkeyc.str_replace('=', '',base64_encode($result));
$a = www.jb51.net;
$b = authcode($a, "ENCODE", "abc123");
echo $b."
";
echo authcode($b, "デコード"、"abc123");
?>
http://www.bkjia.com/PHPjc/726030.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/726030.html技術記事次のようにコードをコピーします: ?php /*** $string 平文または暗号文 * $operation 暗号化 ENCODE または復号 DECODE * $key キー * $expiry キーの有効期間*/ function authcode($string, $operat...