使用openssl而不是mcrypt在PHP中解密AES-256-CFB

时间:2018-02-22 10:12:01

标签: php encryption aes mcrypt php-openssl

下面的函数正确解密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中),但输出上有垃圾。

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);
}

可能是什么问题?

1 个答案:

答案 0 :(得分:0)

openssl_decrypt使用PKCS#5填充,其中mcrypt使用零填充消息。

根据the docs使用OPENSSL_ZERO_PADDING时,请尝试使用openssl_decrypt选项。