【问题标题】:Decrypt AES-256-CFB in PHP with openssl instead mcrypt用 openssl 代替 mcrypt 在 PHP 中解密 AES-256-CFB
【发布时间】:2018-08-02 03:28:36
【问题描述】:

下面的函数正确解密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);
}

可能是什么问题?

【问题讨论】:

    标签: php encryption aes mcrypt php-openssl


    【解决方案1】:

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

    按照the docs 使用openssl_decrypt 时尝试使用OPENSSL_ZERO_PADDING 选项。

    【讨论】:

    • 试过 openssl_decrypt($str, 'AES-256-CFB', $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING, $iv);和 openssl_decrypt($str, 'AES-256-CFB', $key, OPENSSL_ZERO_PADDING, $iv); - 没有帮助
    猜你喜欢
    • 1970-01-01
    • 2021-12-20
    • 2014-02-06
    • 1970-01-01
    • 1970-01-01
    • 2018-10-04
    • 2023-02-23
    • 2017-04-12
    • 1970-01-01
    相关资源
    最近更新 更多