本文介绍了使用 openssl 而不是 mcrypt 在 PHP 中解密 AES-256-CFB的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

下面的函数正确解密php5中的数据

The function below correctly decrypt the data in 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 中),但在输出中得到了垃圾.

I tried to use openssl instead of mcrypt (in php7), but got garbage on the output.

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

可能是什么问题?

推荐答案

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

openssl_decrypt uses PKCS#5 padding, where as mcrypt pads messages with zeros.

根据 .

Try using the OPENSSL_ZERO_PADDING option when using openssl_decrypt as per the docs.

这篇关于使用 openssl 而不是 mcrypt 在 PHP 中解密 AES-256-CFB的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-05 15:28