Php mcrypt_解密、openssl_解密和0x06065064 EVP_解密最终错误

Php mcrypt_解密、openssl_解密和0x06065064 EVP_解密最终错误,php,openssl,mcrypt,Php,Openssl,Mcrypt,我对openssl\u decrypt函数有问题 示例代码: // mcrypt $decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $iv); // OpenSSL $decrypted = openssl_decrypt($data, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv); mcrypt\u decrypt函数工作正常。但是opens

我对
openssl\u decrypt
函数有问题

示例代码:

// mcrypt
$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $iv);

// OpenSSL
$decrypted = openssl_decrypt($data, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv);
mcrypt\u decrypt
函数工作正常。但是
openssl\u decrypt
返回
FALSE
和以下错误:

错误:06065064:数字信封例程:EVP_DecryptFinal_ex:错误解密

密钥长度为32字节,iv为16字节


有人知道出了什么问题吗?

问题的解决方案是
OPENSSL\u RAW\u DATA
OPENSSL\u ZERO\u PADDING

$decrypted = openssl_decrypt($data, 'AES-256-CBC', $key, OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING, $iv);

最好不要使用mcrypt,它是废弃软件,多年来没有更新过,不支持标准PKCS#7(née PKCS#5)填充,只支持非标准的空填充,甚至不能用于二进制数据。mcrypt在2003年就有很多杰出的作品。。取而代之的是考虑使用,它是维护和正确的。绝对救命。