DXのauthcodeをJS版に変更、変換困難
<br> // パラメータの説明 <br> // $string: 平文または暗号文 <br> // $operation: DECODE は復号化を意味し、その他は暗号化を意味します <br> // $key:キー <br> // $expiry: 暗号文の有効期限 <br> function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) { <br> // 動的キーの長さ。同じ平文は動的キーに依存して異なる暗号文を生成します <br> $ckey_length = 4; <br> // キー <br> $key = md5($key ? $key : $GLOBALS['discuz_auth_key']); <br> // キー a は暗号化と復号化に参加します <br> $keya = md5(substr($key, 0, 16)); // キー b はデータ整合性の検証に使用されます <br> $keyb = md5(substr($key, 16, 16)); // キー c は、生成された暗号文を変更するために使用されます <br> $keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : ''; //計算に関係するキー <br> $cryptkey = $keya.md5($keya.$keyc); $key_length = strlen($cryptkey) <br> // プレーン テキスト。最初の 10 ビットは、タイムスタンプを保存し、復号化中にデータの有効性を検証するために使用されます。10 ~ 26 ビットは、$keyb (キー b) を保存するために使用されます。このキーは、復号化中にデータの整合性を検証するために使用されます。 <br> // 復号化する場合は、$ckey_length ビットから開始します。これは、暗号文の前の $ckey_length ビットに動的キーが保存され、正しい復号化が保証されるためです <br> $string = $operation == 'DECODE' ?base64_decode(substr($string, $ckey_length)) : sprintf(' 0d', $expiry ? $expiry time() : 0).substr(md5($string.$ keyb) ), 0, 16).$string <br> $string_length = strlen($string); $結果 = ''; $box = range(0, 255); $rndkey = 配列<br> // キーブックを生成 <br> for($i = 0; $i $rndkey[$i] = ord($cryptkey[$i % $key_length]); } <br> //固定アルゴリズムを使用してキーブックをスクランブルし、ランダム性を高めるのは複雑に見えるかもしれませんが、実際には暗号文の強度は向上しません <br> for($j = $i = 0; $i $j = ($j $box[$i] $rndkey[$i]) % 256; $tmp = $box[$i] <br> $box[$i] = $box[$j] <br> $box[$j] = $tmp; } <br> // コアの暗号化と復号化部分 <br> for($a = $j = $i = 0; $i $a = ($a 1) % 256; <br> $j = ($j $box[$a]) % 256; $tmp = $box[$a];