我正在努力使用PHP的mcrypt函数。我之前从未使用它们,它们在我的测试服务器上工作正常(WAMP PHP 5.4.3),但它们在生产服务器上随机失败(LAMP PHP 5.2.17)。当我运行decrypt函数时,我得到随机(二进制?)字符,如下所示:n / = C_ +` n{'a 6 Xh fEe41Omk7DjQ6/ n6leoTg ==。< / p>
以下是加密和解密功能。这些来自我一直在使用的nonce class。
我尝试过的事情:
我还应该尝试其他什么?
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
)
)
);
}
答案 0 :(得分:1)
经过几个小时的撞击我的头撞墙,我意识到问题与mcrypt没有任何关系。在将其输出到查询字符串之前,我只需要urlencode
加密的字符串。
当我稍后尝试$_REQUEST
加密字符串进行解密时,这会导致部分加密字符串丢失。这解释了为什么失败是随机的,因为它取决于加密字符串中出现的“特殊”字符。