之前要用到 mcrypt 進行加解密,在網上搜了一段現成的**拿來用,使用後發現出現亂碼,百尋不得答案,自己不斷測試修改,終於發現問題。
網上的**:
<?
// encrypt function
function mc_encrypt($encrypt, $mc_key)
// decrypt function
function mc_decrypt($decrypt, $mc_key)
?>
後來參考了下: 以為是 key 長度的問題,將 key 從 8 位增加到 32 位,還是有亂碼。
網上關於 mcrypt 亂碼的文章很少,於是將mcrypt_rijndael_256
換成 mcrypt_des,以為解決了,但是後台監控到的指令碼依然會有亂碼。
function mc_encrypt($encrypt, $mc_key)
function mc_decrypt($decrypt, $mc_key)
突然想到之前看的文章,mcrypt解密時末尾會出現空白字元:所以要進行trim處理
這有個誤區,有人把加密後的字串也進行了trim,trim(mcrypt_encrypt(mcrypt_des, $mc_key, trim($encrypt), mcrypt_mode_ecb)),而正是這一步,照成了亂碼的出現,我用strlen測試了下加密後的字串$passcrypt的長度,沒有trim的長度為384,trim後字串長度為383。不對 $passcrypt 進行 trim 可以正常解密,末尾沒有亂碼。
正是由於對 $passcrypt 進行了 trim,兩者的長度不一致了,解密出來的資料也不一致了。
因此,只需在最後一步,即解密時進行 trim 操作即可,trim(mcrypt_decrypt(...)),到此,所有問題解決。
測試資料:
$str =
正確的加解密函式應該是:
function mc_encrypt($encrypt, $mc_key)
function mc_decrypt($decrypt, $mc_key)
利用Mcrypt擴充套件加密與解密
注意 首先php要安裝擴充套件的mcrypt庫 這兩個檔案libmcrypt.dll和libmhash.dll在phpstudy的php裡面有 winodws的複製libmcrypt.dll和libmhash.dll放在windows system32下面 然後開啟php的配置檔案php.ini新增...
對稱加密 利用mcrypt實現加密解密 2
加密解密類 也是對稱加密 aes 模式,和 我之前寫的 利用mcrypt實現加密解密 1 的區別是 這個生成的秘鑰是唯一的,之前的是多個秘鑰解密的值是一樣的 注意 php版本在 7.1.9以上的不贊成使用 mcrypt module open 函式 貼上即用 class cryptaes funct...
php基於mcrypt的加密解密例項
php中自帶了相當多的加密的方法,這裡我們來看一下mcrypt擴充套件的使用方式。也是在工作中需要用這個東西加密訪問使用者的cookie的值,認真的學習了這個方面的內容。1.簡介 mcrypt是php的乙個擴充套件,完成了常用加密演算法的封裝。其實該擴充套件是對mcrypt標準類庫的封裝,mcryp...