[英]PHP mcrypt_decrypt randomly failing
我在努力使用PHP的mcrypt函數。 我以前從未使用過它們,它們在我的測試服務器(WAMP PHP 5.4.3)上運行良好,但是在生產服務器(LAMP PHP 5.2.17)上隨機出現故障。 當我運行解密函數時,我得到的是隨機(二進制?)字符,如下所示:n / =C_ +` n{'a 6 Xh fEe41Omk7DjQ6/ n6leoTg ==。
以下是加密和解密功能。 這些來自我一直在使用的隨機數類 。
我嘗試過的事情:
我還有什么要嘗試的嗎?
private function fnEncrypt($sValue)
{
return trim(
base64_encode(
mcrypt_encrypt(
MCRYPT_RIJNDAEL_256,
hash($this->hash, $this->secret, true), $sValue,
MCRYPT_MODE_ECB,
mcrypt_create_iv(
mcrypt_get_iv_size(
MCRYPT_RIJNDAEL_256,
MCRYPT_MODE_ECB
),
MCRYPT_RAND
)
)
)
);
}
private function fnDecrypt($sValue)
{
return trim(
mcrypt_decrypt(
MCRYPT_RIJNDAEL_256,
hash($this->hash, $this->secret, true),
base64_decode($sValue),
MCRYPT_MODE_ECB,
mcrypt_create_iv(
mcrypt_get_iv_size(
MCRYPT_RIJNDAEL_256,
MCRYPT_MODE_ECB
),
MCRYPT_RAND
)
)
);
}
經過幾個小時將我的頭撞在牆上的那一刻之后,我意識到問題與mcrypt無關。 我只需要對加密的字符串進行urlencode
,然后再將其輸出到查詢字符串中即可。
當我稍后嘗試對加密字符串$_REQUEST
進行解密時,這導致丟失了一部分加密字符串。 這解釋了為什么失敗是隨機的,因為失敗取決於加密字符串中纏繞的“特殊”字符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.