2016-05-31 52 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

絕對救生員。 –