国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > CMS > Discuz > 正文

php加密之discuz內(nèi)容經(jīng)典加密方式實(shí)例詳解

2024-09-11 09:03:26
字體:
供稿:網(wǎng)友

本文實(shí)例講述了php加密之discuz內(nèi)容經(jīng)典加密方式。分享給大家供大家參考,具體如下:

導(dǎo)讀:有的時(shí)候,我們希望對(duì)表里的某些敏感字段進(jìn)行加密,想了好長(zhǎng)時(shí)間沒有比較好的解決方案,后臺(tái)在網(wǎng)上查了查,放心discuz論壇的這種方案對(duì)這種情況解決的不錯(cuò),特copy過來,給大家分享一下,代碼如下:

  1. header ("Content-type:text/html;charset=UTF-8"); 
  2. echo$string='花園路888號(hào)'
  3. echo'<hr/>加密有效期10秒,密文內(nèi)容:'
  4. // $string='1111'; 
  5. $sss=authcode($string,'','',10); 
  6. echo$sss
  7. echo'<hr/>加密后立即解密:...'
  8. echoauthcode($sss); 
  9. sleep(6); 
  10. echo'<hr/>6秒后解密...'
  11. $aaaa=authcode($sss); 
  12. var_dump($aaaa); 
  13. sleep(5); 
  14. echo'<hr/>再次5秒后解密...'
  15. $aaaa=authcode($sss); 
  16. var_dump($aaaa); 
  17. /** 
  18.  * 
  19.  * @param string $string    明文或密文字符串 
  20.  * @param string $operation    DECODE表示解密,其它表示加密 
  21.  * @param string $key    密鑰 
  22.  * @param int $expiry    密文有效期,0代碼永不過期 
  23.  * @return string 
  24.  */ 
  25. functionauthcode($string,$operation='DECODE',$key='',$expiry= 0) { 
  26.     // 動(dòng)態(tài)密匙長(zhǎng)度,相同的明文會(huì)生成不同密文就是依靠動(dòng)態(tài)密匙 
  27.     $ckey_length= 4; 
  28.     // 密匙 
  29.     $key= md5 ($key?$key:$GLOBALS['discuz_auth_key'] ); 
  30.     // 密匙a會(huì)參與加解密 
  31.     $keya= md5 (substr($key, 0, 16 ) ); 
  32.     // 密匙b會(huì)用來做數(shù)據(jù)完整性驗(yàn)證 
  33.     $keyb= md5 (substr($key, 16, 16 ) ); 
  34.     // 密匙c用于變化生成的密文 
  35.     $keyc=$ckey_length? ($operation=='DECODE'?substr($string, 0,$ckey_length) :substr( md5 ( microtime () ), -$ckey_length)) :''
  36.     // 參與運(yùn)算的密匙 
  37.     $cryptkey=$keya. md5 ($keya.$keyc); 
  38.     $key_length=strlen($cryptkey); 
  39.     // 明文,前10位用來保存時(shí)間戳,解密時(shí)驗(yàn)證數(shù)據(jù)有效性,10到26位用來保存$keyb(密匙b),解密時(shí)會(huì)通過這個(gè)密匙驗(yàn)證數(shù)據(jù)完整性 
  40.     // 如果是解碼的話,會(huì)從第$ckey_length位開始,因?yàn)槊芪那?ckey_length位保存 動(dòng)態(tài)密匙,以保證解密正確 
  41.     $string=$operation=='DECODE'?base64_decode(substr($string,$ckey_length) ) : sprintf ('0d',$expiry?$expiry+ time () : 0 ) .substr( md5 ($string.$keyb), 0, 16 ) .$string
  42.     $string_length=strlen($string); 
  43.     $result=''
  44.     $box= range ( 0, 255 ); 
  45.     $rndkey=array(); 
  46.     // 產(chǎn)生密匙簿 
  47.     for($i= 0;$i<= 255;$i++) { 
  48.         $rndkey[$i] = ord ($cryptkey[$i%$key_length] ); 
  49.     } 
  50.     // 用固定的算法,打亂密匙簿,增加隨機(jī)性,好像很復(fù)雜,實(shí)際上對(duì)并不會(huì)增加密文的強(qiáng)度 
  51.     for($j=$i= 0;$i< 256;$i++) { 
  52.         $j= ($j+$box[$i] +$rndkey[$i]) % 256; 
  53.         $tmp=$box[$i]; 
  54.         $box[$i] =$box[$j]; 
  55.         $box[$j] =$tmp
  56.     } 
  57.     // 核心加解密部分 
  58.     for($a=$j=$i= 0;$i<$string_length;$i++) { 
  59.         $a= ($a+ 1) % 256; 
  60.        $j= ($j+$box[$a]) % 256; 
  61.         $tmp=$box[$a]; 
  62.         $box[$a] =$box[$j]; 
  63.         $box[$j] =$tmp
  64.         // 從密匙簿得出密匙進(jìn)行異或,再轉(zhuǎn)成字符 
  65.         $result.=chr( ord ($string[$i] ) ^ ($box[($box[$a] +$box[$j]) % 256]) ); 
  66.     } 
  67.     if($operation=='DECODE') { 
  68.        // substr($result, 0, 10) == 0 驗(yàn)證數(shù)據(jù)有效性 
  69.        // substr($result, 0, 10) - time() > 0 驗(yàn)證數(shù)據(jù)有效性 
  70.         // substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 
  71.         // 16) 驗(yàn)證數(shù)據(jù)完整性 
  72.       // 驗(yàn)證數(shù)據(jù)有效性,請(qǐng)看未加密明文的格式 
  73.       if((substr($result, 0, 10 ) == 0 ||substr($result, 0, 10 ) - time () > 0) &&substr($result, 10, 16 ) ==substr( md5 (substr($result, 26 ) .$keyb), 0, 16 )) { 
  74.             returnsubstr($result, 26 ); 
  75.        }else
  76.             return''
  77.        } 
  78.     }else
  79.         // 把動(dòng)態(tài)密匙保存在密文里,這也是為什么同樣的明文,生產(chǎn)不同密文后能解密的原因 
  80.         // 因?yàn)榧用芎蟮拿芪目赡苁且恍┨厥庾址瑥?fù)制過程可能會(huì)丟失,所以用base64編碼 
  81.         return$keyc.str_replace('=','',base64_encode($result) ); 
  82.     } 

以上代碼運(yùn)行結(jié)果:

花園路888號(hào)

加密有效期10秒,密文內(nèi)容:ce9eelLd6jpd7hZJTRg+/fgg8cD9VG+1NsHvkavEKhdvhk7jcfDoQTYSAAw

加密后立即解密:...花園路888號(hào)

6秒后解密...

string'花園路888號(hào)' (length=15)

再次5秒后解密...

string'' (length=0)

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 翼城县| 保靖县| 个旧市| 隆子县| 哈巴河县| 昌吉市| 田阳县| 康定县| 醴陵市| 山西省| 大渡口区| 鄂托克前旗| 桐城市| 东至县| 巴楚县| 三门峡市| 岳阳市| 江源县| 凉山| 田阳县| 静海县| 水富县| 平邑县| 潼关县| 新巴尔虎左旗| 阜新市| 永丰县| 房产| 抚顺市| 茌平县| 准格尔旗| 洞口县| 西吉县| 龙井市| 黑河市| 福海县| 仪征市| 高碑店市| 池州市| 苗栗县| 兰溪市|