php暗号化のdiscuzコンテンツ古典暗号化方式の例の詳細

4871 ワード

本明細書の例では、php暗号化のdiscuzコンテンツの古典的な暗号化方式について説明する.皆さんの参考にしてください.具体的には以下の通りです.
ガイド:ある时、私达は表の中のいくつかの敏感なフィールドに対して暗号化を行うことを望んで、长い时间考えて比较的に良い解决策がなくて、バックグラウンドはネット上で调べて、安心してdiscuzフォーラムのこのような方案はこのような情况に対して解决するのが悪くなくて、特copyは来て、みんなに享受して、コードは以下の通りです:

header ( "Content-type:text/html;charset=UTF-8" );
echo $string='   888 ';
echo '
10 , :'; // $string='1111'; $sss=authcode($string,'','',10); echo $sss; echo '
:...'; echo authcode($sss); sleep(6); echo '
6 ...'; $aaaa=authcode($sss); var_dump($aaaa); sleep(5); echo '
5 ...'; $aaaa=authcode($sss); var_dump($aaaa); /** * * @param string $string * @param string $operation DECODE , * @param string $key * @param int $expiry ,0 * @return string */ function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) { // , $ckey_length = 4; // $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 $keyb( b), // , $ckey_length , $ckey_length , $string = $operation == 'DECODE' ? base64_decode ( substr ( $string, $ckey_length ) ) : sprintf ( '0d', $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; $i < $string_length; $i ++) { $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() > 0 // substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, // 16) // , if ((substr ( $result, 0, 10 ) == 0 || substr ( $result, 0, 10 ) - time () > 0) && substr ( $result, 10, 16 ) == substr ( md5 ( substr ( $result, 26 ) . $keyb ), 0, 16 )) { return substr ( $result, 26 ); } else { return ''; } } else { // , , // , , base64 return $keyc . str_replace ( '=', '', base64_encode ( $result ) ); } }

以上のコードの実行結果:

   888 
     10 ,    :ce9eelLd6jpd7hZJTRg+/fgg8cD9VG+1NsHvkavEKhdvhk7jcfDoQTYSAAw
       :...   888 
6    ...
string'   888 ' (length=15)
  5    ...
string'' (length=0)


PS:暗号解読に興味のある方は、当駅のオンラインツールも参考にしてください.
MD 5オンライン暗号化ツール:http://tools.jb51.net/password/CreateMD5Password
迅雷、急行、サイクロンURL暗号化/復号ツール:http://tools.jb51.net/password/urlrethunder
オンラインハッシュ/ハッシュアルゴリズム暗号化ツール:http://tools.jb51.net/password/hash_encrypt
オンラインMD 5/hash/SAH-1/SAH-2/SAH-256/SAH-512/SAH-3/RIPEMD-160暗号化ツール:http://tools.jb51.net/password/hash_md5_sha
オンラインsha 1/sha 224/sha 256/sha 384/sha 512暗号化ツール:http://tools.jb51.net/password/sha_encode
PHPに関する内容についてもっと兴味のある読者は、「php暗号化方法総括」、「PHP符号化とトランスコード操作技巧総括」、「PHP数学演算技巧総括」、「PHP配列(Array)操作技巧大全」、「php文字列(string)用法総括」、「PHPデータ構造とアルゴリズム教程」、「phpプログラム設計アルゴリズム総括」及び『php正規表現の使い方まとめ』
ここで述べたことが皆さんのPHPプログラム設計に役立つことを願っています.