最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解 PHP加密解密字符串函數(shù)附源碼下載

 更新時間:2015年12月18日 09:12:22   投稿:mrr  
項目中有時我們需要使用PHP將特定的信息進(jìn)行加密,也就是通過加密算法生成一個加密字符串,這個加密后的字符串可以通過解密算法進(jìn)行解密,便于程序?qū)饷芎蟮男畔⑦M(jìn)行處理

項目中有時我們需要使用PHP將特定的信息進(jìn)行加密,也就是通過加密算法生成一個加密字符串,這個加密后的字符串可以通過解密算法進(jìn)行解密,便于程序?qū)饷芎蟮男畔⑦M(jìn)行處理。

下面先給大家展示下效果圖,感興趣的朋友繼續(xù)閱讀全文。

效果演示     源碼下載

筆者收錄了一些比較經(jīng)典的PHP加密解密函數(shù)代碼,分享給大家。加密解密原理一般都是通過一定的加密解密算法,將密鑰加入到算法中,最終得到加密解密結(jié)果。

1、非常給力的authcode加密函數(shù),Discuz!經(jīng)典代碼(帶詳解):

function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) { 
 // 動態(tài)密匙長度,相同的明文會生成不同密文就是依靠動態(tài)密匙 
 $ckey_length = 4; 
 // 密匙 
 $key = md5($key ? $key : $GLOBALS['discuz_auth_key']); 
 // 密匙a會參與加解密 
 $keya = md5(substr($key, 0, 16)); 
 // 密匙b會用來做數(shù)據(jù)完整性驗證 
 $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位用來保存時間戳,解密時驗證數(shù)據(jù)有效性,10到26位用來保存$keyb(密匙b), 
//解密時會通過這個密匙驗證數(shù)據(jù)完整性 
 // 如果是解碼的話,會從第$ckey_length位開始,因為密文前$ckey_length位保存 動態(tài)密匙,以保證解密正確 
 $string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : 
sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string; 
 $string_length = strlen($string); 
 $result = ''; 
 $box = range(0, 255); 
 $rndkey = array(); 
 // 產(chǎn)生密匙簿 
 for($i = 0; $i <= 255; $i++) { 
 $rndkey[$i] = ord($cryptkey[$i % $key_length]); 
 } 
 // 用固定的算法,打亂密匙簿,增加隨機性,好像很復(fù)雜,實際上對并不會增加密文的強度 
 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; 
 // 從密匙簿得出密匙進(jìn)行異或,再轉(zhuǎn)成字符 
 $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256])); 
 } 
 if($operation == 'DECODE') { 
 // 驗證數(shù)據(jù)有效性,請看未加密明文的格式 
 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 { 
 // 把動態(tài)密匙保存在密文里,這也是為什么同樣的明文,生產(chǎn)不同密文后能解密的原因 
 // 因為加密后的密文可能是一些特殊字符,復(fù)制過程可能會丟失,所以用base64編碼 
 return $keyc.str_replace('=', '', base64_encode($result)); 
 } 
}

函數(shù)authcode($string, $operation, $key, $expiry)中的$string:字符串,明文或密文;$operation:DECODE表示解密,其它表示加密;$key:密匙;$expiry:密文有效期。

用法:

$str = 'abcdef'; 
$key = 'www.helloweba.com'; 
echo authcode($str,'ENCODE',$key,0); //加密 
$str = '56f4yER1DI2WTzWMqsfPpS9hwyoJnFP2MpC8SOhRrxO7BOk'; 
echo authcode($str,'DECODE',$key,0); //解密 

2、加解密函數(shù)encrypt():

function encrypt($string,$operation,$key=''){ 
 $key=md5($key); 
 $key_length=strlen($key); 
 $string=$operation=='D'?base64_decode($string):substr(md5($string.$key),0,8).$string; 
 $string_length=strlen($string); 
 $rndkey=$box=array(); 
 $result=''; 
 for($i=0;$i<=255;$i++){ 
  $rndkey[$i]=ord($key[$i%$key_length]); 
 $box[$i]=$i; 
 } 
 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=='D'){ 
 if(substr($result,0,8)==substr(md5(substr($result,8).$key),0,8)){ 
  return substr($result,8); 
 }else{ 
  return''; 
 } 
 }else{ 
 return str_replace('=','',base64_encode($result)); 
 } 
} 

函數(shù)encrypt($string,$operation,$key)中$string:需要加密解密的字符串;$operation:判斷是加密還是解密,E表示加密,D表示解密;$key:密匙。

用法:

$str = 'abc'; 
$key = 'www.helloweba.com'; 
$token = encrypt($str, 'E', $key); 
echo '加密:'.encrypt($str, 'E', $key); 
echo '解密:'.encrypt($str, 'D', $key); 

以上內(nèi)容是小編給大家介紹的PHP加密解密字符串函數(shù)附源碼下載的全部敘述,希望大家喜歡。

相關(guān)文章

  • Django中的cookie與session操作實例代碼

    Django中的cookie與session操作實例代碼

    本文通過示例代碼給大家介紹了Django中的cookie與session操作,需要的朋友參考下吧
    2017-08-08
  • Yii框架實現(xiàn)對數(shù)據(jù)庫的CURD操作示例

    Yii框架實現(xiàn)對數(shù)據(jù)庫的CURD操作示例

    這篇文章主要介紹了Yii框架實現(xiàn)對數(shù)據(jù)庫的CURD操作,結(jié)合實例形式分析了Yii框架連接數(shù)據(jù)庫與CURD增刪改查等常見操作技巧,需要的朋友可以參考下
    2019-09-09
  • Laravel框架控制器的middleware中間件用法分析

    Laravel框架控制器的middleware中間件用法分析

    這篇文章主要介紹了Laravel框架控制器的middleware中間件用法,結(jié)合具體案例形式分析了Laravel框架控制器的middleware中間件相關(guān)使用步驟、操作技巧與注意事項,需要的朋友可以參考下
    2019-09-09
  • 微信支付開發(fā)訂單查詢實例

    微信支付開發(fā)訂單查詢實例

    本篇文章主要介紹微信支付中訂單查詢功能的實現(xiàn),并提供代碼實例,希望能幫助到微信支付開發(fā)的小伙伴
    2016-07-07
  • Ubuntu 16.04中Laravel5.4升級到5.6的步驟

    Ubuntu 16.04中Laravel5.4升級到5.6的步驟

    這篇文章主要給大家介紹了關(guān)于在Ubuntu 16.04中Laravel5.4升級到5.6的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • Joomla調(diào)用系統(tǒng)自帶編輯器的實現(xiàn)方法

    Joomla調(diào)用系統(tǒng)自帶編輯器的實現(xiàn)方法

    這篇文章主要介紹了Joomla調(diào)用系統(tǒng)自帶編輯器的實現(xiàn)方法,實例分析了Joomla調(diào)用系統(tǒng)自帶編輯器的具體步驟、相關(guān)函數(shù)與使用技巧,需要的朋友可以參考下
    2016-05-05
  • PHP之密碼加密的幾種方式

    PHP之密碼加密的幾種方式

    這篇文章主要是針對PHP實現(xiàn)密碼加密的幾種方式的詳細(xì)介紹,有需要的朋友可以參考下本文。
    2015-07-07
  • 分享PHP header函數(shù)使用教程

    分享PHP header函數(shù)使用教程

    在php語言中,header()這個函數(shù)很有用的,尤其在用到ajax時候,他會幫你解決一些意想不到的問題。下面是header的一些詳細(xì)講解。希望對phper有幫助
    2013-09-09
  • php array_values 返回數(shù)組的所有值詳解及實例

    php array_values 返回數(shù)組的所有值詳解及實例

    這篇文章主要介紹了php array_values 返回數(shù)組的所有值詳解及實例的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • Zend Framework前端控制器用法示例

    Zend Framework前端控制器用法示例

    這篇文章主要介紹了Zend Framework前端控制器用法,結(jié)合實例形式分析了Zend Framework前端控制器的常用方法與相關(guān)使用技巧,需要的朋友可以參考下
    2016-12-12

最新評論

天长市| 五寨县| 西平县| 隆林| 德安县| 彭阳县| 蛟河市| 肥西县| 屯昌县| 洛隆县| 塔河县| 本溪市| 宁晋县| 威宁| 新津县| 厦门市| 昭苏县| 英德市| 明溪县| 张家口市| 富川| 富顺县| 淮安市| 汶川县| 神池县| 双牌县| 共和县| 左云县| 巢湖市| 竹山县| 石棉县| 汉阴县| 博爱县| 屯门区| 阳高县| 临清市| 黑水县| 罗江县| 大姚县| 外汇| 洪泽县|