Discuz 関数の中で最も古典的な関数は authcode 関数です。これは、supesite、UCenterHome、UCenter、Discuz X のすべてがこの関数を使用して送信文字列と Cookie を暗号化するためです
今日はauthcodeについて詳しく説明します。うまく書かれていない場合は、親指を立ててください。気に入ったらそこから学ぶことができます!
/*- *
- * 関数: 固定キーを使用して文字列を暗号化および復号化します。 暗号化された文字列はランダムです
- * パラメーター分析: $string は暗号化された文字列です ('ENCODE' は暗号化された文字列です)。暗号化、'DECODE' は復号化操作)、$key は暗号化に使用されるキー、$expiry は有効期限です
- * 使用例: authcode('123', 'ENCODE', 'jordan', 0); という文字列を使用します。 'jordan' で文字列 '123' を暗号化します
- *
- * */
-
- function authcode($string, $operation = 'DECODE', $key = '', $ ExpiRY = 0) {
-
- // keyc length,これを使用して、 $ cKEY_LENGTH = 4; $key = md5($key ? $key : $GLOBALS['discuz_auth_key']) , 0, 16));
-
- // keyb は上記の md5 の 2 番目の md5 (キーの後の 16 桁)、検証文字列
- $keyb = md5(substr($key, 16, 16)) /keyc の長さを取得します
- // が復号されます。 keyc はパスワード文字列をインターセプトします。 注: Keyc は変更されずに渡されます
- // 注: keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : '';
-
- 暗号化に使用される keya と keyc を結合する復号化 $cryptkey = $$keya.md5($keya.$ keyc); /$ cryptkeyは16+32 =48
- $ key_length($ cryptkey)を使用して、base64が使用されているため、暗号化されている場合は、タイムスタンプを連結します。有効期限秒を使用して 10 桁の文字列にフォーマットし、16 桁の検証文字列と連結してから、元の文字列を連結します
- $string = $operation == 'base64_decode(substr($string, $ ? ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string) .$keyb), 0, 16).$string;
-
- // を取得処理された文字列の長さ
- /fill box array(0, 1, 2, 3, ...省略... , 255);
- $box = range( 0, 255); 文字列 $rndkey = array() ;
- を通して を通して を通して を通して を通して を通して を通して を通して を通して を通して を通して「 's」 back-‐to‐‐‐‐‐‐‐ 文字列へ
- to } 续 // パスワードブックの生成を中断し続けます
- ($ j = $ i = 0; $ i & lt; 256; $ i ++) {
- $ j = ($ j + $box [$ i] + $ rndkey [ $i]) % 256;
- 生 // パスワードブックを再び破壊し、機密ランダムを確保します
- ($ a = $ j = $ i = 0; $ i & lt; $ string_length; $ i ++) {
- $ a = ($ a+1) %256;
- $ box [$ j] = $ tmp; $ box [$ j]);
- // 検証パス、元の文字列を返します
- Return Substr ($ Result, 26);
- } else {
- // Return ''; )
-
- Return $ Keyc.str_replace ('=', '', Base64_enCode ($ Result) );
- }
-
- }
-
-
-
-
-
-
-
-
-
クッキー
-
-
-
-
-
-
-
-
|