經(jīng)典PHP加密解密函數(shù)Authcode()修復(fù)版代碼
Authcode這個(gè)函數(shù)很多人都使用,這函數(shù)來(lái)自Discuz程序,用于加密解密字符串,可以設(shè)置鑰匙(key)和過(guò)期時(shí)間,在很多時(shí)候都用得著。原版的函數(shù)代碼可能會(huì)生成+、/、&這樣的字符,導(dǎo)致通過(guò)URL傳值取回時(shí)被轉(zhuǎn)義,導(dǎo)致無(wú)法解密?;鸲司W(wǎng)絡(luò)稍加修改,把這幾個(gè)字符替換成其它字符,解密時(shí)再替換回去,這樣就完美了!
代碼如下:
function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0){ if($operation == 'DECODE') { $string = str_replace('[a]','+',$string); $string = str_replace('[b]','&',$string); $string = str_replace('[c]','/',$string); } $ckey_length = 4; $key = md5($key ? $key : 'livcmsencryption '); $keya = md5(substr($key, 0, 16)); $keyb = md5(substr($key, 16, 16)); $keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : ''; $cryptkey = $keya.md5($keya.$keyc); $key_length = strlen($cryptkey); $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(); 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') { 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 { $ustr = $keyc.str_replace('=', '', base64_encode($result)); $ustr = str_replace('+','[a]',$ustr); $ustr = str_replace('&','[b]',$ustr); $ustr = str_replace('/','[c]',$ustr); return $ustr; } }
- php結(jié)合md5實(shí)現(xiàn)的加密解密方法
- PHP加密解密實(shí)例分析
- PHP下SSL加密解密、驗(yàn)證、簽名方法(很簡(jiǎn)單)
- PHP封裝的字符串加密解密函數(shù)
- thinkphp微信開(kāi)發(fā)(消息加密解密)
- PHP加密解密函數(shù)詳解
- PHP實(shí)現(xiàn)加強(qiáng)版加密解密類實(shí)例
- PHP rsa加密解密使用方法
- PHP加密解密字符串匯總
- PHP加密解密類實(shí)例分析
- php rsa加密解密使用詳解
- php中base64_decode與base64_encode加密解密函數(shù)實(shí)例
- PHP實(shí)現(xiàn)的DES加密解密實(shí)例代碼
相關(guān)文章
詳解PHP中的mb_detect_encoding函數(shù)使用方法
這篇文章主要介紹了詳解PHP中的mb_detect_encoding函數(shù)使用方法,包括對(duì)字符串編碼的轉(zhuǎn)換和判斷以及Call to undefined function mb_detect_encoding()錯(cuò)誤的解決,需要的朋友可以參考下2015-08-08PHP Parse Error: syntax error, unexpected $end 錯(cuò)誤的解決辦法
今天幫客戶配置服務(wù)器,訪問(wèn)php的時(shí)候提示PHP Parse Error: syntax error, unexpected $end 錯(cuò)誤,通過(guò)查找找到了問(wèn)題,特分享下2012-06-06PHP Imagick完美實(shí)現(xiàn)圖片裁切、生成縮略圖、添加水印
這篇文章主要介紹了PHP Imagick完美實(shí)現(xiàn)圖片裁切、生成縮略圖、添加水印的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-02-02PHP連接MSSQL時(shí)nvarchar字段長(zhǎng)度被截?cái)酁?55的解決方法
這篇文章主要介紹了PHP連接MSSQL時(shí)nvarchar字段長(zhǎng)度被截?cái)酁?55的解決方法,可通過(guò)CAST數(shù)據(jù)類型轉(zhuǎn)換來(lái)解決,是非常實(shí)用的技巧,需要的朋友可以參考下2014-12-12php實(shí)現(xiàn)的遍歷文件夾下所有文件,編輯刪除
遍歷文件夾; 功能:(a)可刪除文件 (b)可編輯文本,網(wǎng)頁(yè)文件 (c)可刪除文件夾,前提是該文件夾為空 (d)可建立文件,文件夾,修改文件夾名稱2010-01-01php實(shí)現(xiàn)獲取文章內(nèi)容第一張圖片的方法
這篇文章主要介紹了php實(shí)現(xiàn)獲取文章內(nèi)容第一張圖片的方法,涉及對(duì)正則表達(dá)式的操作,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2014-11-11