本文介绍了使用 openssl 而不是 mcrypt 在 PHP 中解密 AES-256-CFB的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
下面的函数正确解密php5中的数据
The function below correctly decrypt the data in php5
function decrypt_mcrypt($key, $str) {
$str = base64_decode($str);
$iv = substr($str, 0, 16);
$str = substr($str, 16);
return mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $str, MCRYPT_MODE_CFB, $iv);
}
我尝试使用 openssl 而不是 mcrypt(在 php7 中),但在输出中得到了垃圾.
I tried to use openssl instead of mcrypt (in php7), but got garbage on the output.
function decrypt_openssl($key, $str) {
$str = base64_decode($str);
$iv = substr($str, 0, 16);
$str = substr($str, 16);
return openssl_decrypt($str, 'AES-256-CFB', $key, OPENSSL_RAW_DATA, $iv);
}
可能是什么问题?
推荐答案
openssl_decrypt
使用 PKCS#5 填充,其中 mcrypt
用零填充消息.
openssl_decrypt
uses PKCS#5 padding, where as mcrypt
pads messages with zeros.
根据 .
Try using the OPENSSL_ZERO_PADDING
option when using openssl_decrypt
as per the docs.
这篇关于使用 openssl 而不是 mcrypt 在 PHP 中解密 AES-256-CFB的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!