ホームページ > バックエンド開発 > PHPチュートリアル > PHP 暗号化および復号化関数の使用法の詳細な分析 authcode_PHP チュートリアル

PHP 暗号化および復号化関数の使用法の詳細な分析 authcode_PHP チュートリアル

WBOY
リリース: 2016-07-13 10:25:50
オリジナル
830 人が閲覧しました

重要なヒント: 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

tru​​e

http://www.bkjia.com/PHPjc/824910.html

技術記事

重要なヒント: Kangsheng の authcode 関数は、中国の PHP コミュニティに多大な貢献をしたと言えます。 Kangsheng 自身の製品を含め、PHP を使用するほとんどの中国企業がこの機能を使用しています...


関連ラベル:
php
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート