我知道PHP的mcrypt_decrypt已經有一百萬個帖子,但是我找不到與我的結果相同的結果。我有一對簡單的加密/解密函數,我想用它來對數據執行雙向加密。奇怪的是,對於我提供給函數的任意隨機字符串的大約4%,它不會成功解密。例如,如果我創建一個從0到9999的「for循環」,並對這些數字的字符串版本進行加密和解密,每次都會失敗相同的值,這些值取決於我傳遞給函數的鍵。我可以傳遞任何關鍵字,雖然失敗的特定值將會改變,但失敗的值的百分比將保持大致不變。PHP Mcrypt - Decrypt函數對於字符串的一小部分不起作用
我已經嘗試過沒有IV參數的ECB模式,並且我嘗試了使用IV參數的CBC模式,並且它會得到相同的結果。
這裏是ECB模式我的加密功能:
function mc_encrypt($string, $mc_key) {
$passcrypt = trim(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $mc_key, trim($string), MCRYPT_MODE_ECB));
$encode = base64_encode($passcrypt);
return $encode;
}
這裏是ECB模式我的解密功能:
function mc_decrypt($string, $mc_key) {
$decoded = base64_decode($string);
$decrypted = trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $mc_key, trim($decoded), MCRYPT_MODE_ECB));
return $decrypted;
}
CBC模式的版本是一樣的,只不過它採用的mcrypt_create_iv ()函數在加密中創建IV,並將其作爲解密參數傳入。
我的「ABC」作爲測試加密密鑰服務器上使用這些功能,如果我從0到300運行,下面的值將不能正確解密:
4,6,70,145,151 ,176,237,254,275
如果我將我的加密密鑰更改爲其他值,它將會正確地返回哪些值,但不會更改值返回的頻率。
任何建議???
在此先感謝!
+1用於故障排除嘗試,因爲這是friggin'怪異的結果。 – BrianHall