重要なヒント: Kangsheng の authcode 関数は、中国の PHP コミュニティに多大な貢献をしたと言えます。 Kangsheng の製品を含め、PHP を使用するほとんどの中国企業は、暗号化にこの関数を使用しており、Authcode は暗号化と復号化に XOR 演算を使用します。
Kangsheng の authcode 機能は、中国の PHP コミュニティに多大な貢献をしたと言えます。 Kangsheng の製品を含め、PHP を使用するほとんどの中国企業は、暗号化にこの関数を使用しており、Authcode は暗号化と復号化に XOR 演算を使用します。
次の場合の原則は次のとおりです:
暗号化
平文: 1010 1001
キー: 1110 0011
暗号文: 0100 0
暗号文 0100 1010 を取得、復号化の必要性キーとパスワードの XOR だけです
Decrypt
Ciphertext: 0100 1010
Key: 1110 0011
Plaintext: 1010 1001
高度なアルゴリズムはありません、キーは非常に重要です。キーを生成する方法。
それでは、Kangsheng の認証コードがどのように行われるかを見てみましょう
コードをコピーします コードは次のとおりです:
// パラメータの説明
// $string: 平文または暗号文
// $operation: DECODE は復号、その他は暗号化を意味します
// $key: 秘密鍵
// $expiry: 暗号文の有効期限
関数 authcode ( $string, $operation = 'DECODE', $key = '', $expiry = 0) {
// 動的キーの長さ。同じ平文は動的キーに応じて異なる暗号文を生成します
$ckey_length = 4;キー a 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);
26 番目のビットは、$keyb (キー b) を保存するために使用されます。復号化時の整合性。
正しい復号化を保証するためのキー
$string = $operation == 'DECODE' ?base64_decode(substr($string, $ckey_length)) :
sprintf('%010d', $expiry + time( ) : 0 ).substr(md5($string.$keyb), 0, 16).$string;
$string_length = ''
$box = range(0, 255) );
$rndkey = array(); key_length]); } }
// 固定アルゴリズムを使用してキーブックをスクランブルし、ランダム性を高めます。これは非常に複雑に見えますが、実際には、キーブックの強度は向上しません。暗号文。
for($j = $i = 0; $i $j = ($j + $box[$i] + $rndkey[$i]) % 256; tmp = $box[$i];
$box[ $i] = $box[$j];
$box[$j] = $tmp }
// コアの暗号化および復号化部分
for($a = $j = $i = 0; $i $ a = ($ a + 1) % 256; % 256;
$ tmp = $ box [$ a]; Box [$ a] = $ BOX [$ j]; // キーブックとは異なります。または文字に変換します
$ result. = CHR ( CHR ( ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]);
}dataデータの妥当性の検証非暗号化されたプレーンテキストの形式を参照してください(($ result、0、10)== 0 || subst($ result、0、10) - time()> 0)&&
substr ($result, 10 , 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) { Else {ハンドル // これが同じ理由です。明示的なテキストは、異なる暗号文の生成後に復号化できます。
http://www.bkjia.com/PHPjc/824910.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/824910.html
技術記事
重要なヒント: Kangsheng の authcode 関数は、中国の PHP コミュニティに多大な貢献をしたと言えます。 Kangsheng 自身の製品を含め、PHP を使用するほとんどの中国企業がこの機能を使用しています...