【问题标题】:mcrypt_decrypt, openssl_decrypt and 0x06065064 EVP_DecryptFinal errormcrypt_decrypt、openssl_decrypt 和 0x06065064 EVP_DecryptFinal 错误
【发布时间】:2016-05-31 08:51:46
【问题描述】:

openssl_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_decrypt 函数工作正常。但是openssl_decrypt 返回FALSE 并出现以下错误:

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

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

有谁知道怎么回事?

【问题讨论】:

  • 最好不要使用mcrypt,它是废弃软件,多年未更新,不支持标准PKCS#7(née PKCS#5)填充,只有非标准空填充可以'甚至不能与二进制数据一起使用。 mcrypt 有许多出色的 bugs 可以追溯到 2003 年。请考虑使用 defuse,它正在维护并且是正确的。

标签: php openssl mcrypt


【解决方案1】:

问题的解决方法是OPENSSL_RAW_DATAOPENSSL_ZERO_PADDING

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

【讨论】:

  • 绝对的救星。
猜你喜欢
  • 2017-10-19
  • 2017-07-28
  • 2013-07-17
  • 2015-01-30
  • 1970-01-01
  • 2023-03-12
  • 2014-07-27
  • 2017-08-10
相关资源
最近更新 更多