【发布时间】:2017-10-19 19:42:45
【问题描述】:
我有一个问题,我想用 open_ssl 解密替换对 mcrypt 的函数调用。但输出是混合的:
这是 mcrypt 实现(效果很好):
$decrypted = trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_128,
substr(sha1($this->secretKey), 0, 32),
base64_decode($encrypted),
MCRYPT_MODE_CBC,
base64_decode($iv)), "\0..\32");
var_dump($decrypted);
我把它翻译成:
var_dump(
trim(
openssl_decrypt(
$encrypted,
'AES-256-CBC',
substr(sha1($this->secretKey), 0, 32),
OPENSSL_ZERO_PADDING, $iv)
),"\0..\32");
,
但是会导致错误:
openssl_decrypt(): IV 传递的长度是 24 字节,比 所选密码预期为 16,正在截断
和混合输出:
'm%xlj j>|lgSke":"2017-05-19T05:48:37-07:00","收据":
第一个被混合的键值对。
任何我可能错过的建议或任何选项?
谢谢!
【问题讨论】:
-
提供一个完整的样本数据集(明文、密钥、iv、密文)来检查任何实现总是一个好主意。这可能很好,因为我们也可以看到加密功能。看到您的解密输出,看起来 iv 的值有误。
标签: php openssl mcrypt php-openssl