我正在努力使用 PHP 的 mcrypt 函数。我以前从未使用过它们,它们在我的测试服务器(WAMP PHP 5.4.3)上运行良好,但它们在生产服务器(LAMP PHP 5.2.17)上随机失败。当我运行解密函数时,我得到如下随机(二进制?)字符:n��/�=�C_����+`�n{'a��6�Xh��fEe41Omk7DjQ6/n6leoTg==。
下面是加密和解密函数。这些来自我一直在使用的nonce 类。
我尝试过的事情:
- 从两个函数中删除 IV 参数
- 在加密函数中创建一个 IV,存储在类属性中,然后在解密函数中使用该属性
- 如此处所述,将IV 存储在加密输出中。
还有什么我应该尝试的吗?
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
)
)
);
}