2016-05-31 118 views
2

我有一个openssl_decrypt函数的问题。mcrypt_decrypt,openssl_decrypt和0x06065064 EVP_DecryptFinal错误

示例代码:

// 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_decrypt功能工作正常。但openssl_decrypt返回FALSE和以下错误:

error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt

的关键是32个字节长,并且IV 16个字节。

有谁知道错在哪里?

+0

最好不要使用mcrypt的,它是放弃的,并没有在年更新一次,并且不支持标准的PKCS#7(姓PKCS# 5)填充,只有非标准的空填充甚至不能用于二进制数据。 mcrypt有很多优秀的[bug](https://sourceforge.net/p/mcrypt/bugs/)可以追溯到2003年。反而考虑使用[defuse](https://github.com/defuse/php-encryption)它正在维护和正确。 – zaph

回答

4

上述问题的解决方案是OPENSSL_RAW_DATAOPENSSL_ZERO_PADDING

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

绝对救生员。 –