php - 将 mcrypt_generic 转换为 openssl_crypt

标签 php openssl mcrypt

PHP 不再支持 mcrypt。我必须制作一个具有完全相同输出的 OpenSSL 替代方案,因为我只能访问一半的代码库。我的尝试全部失败了。正如您在下面看到的,操作系统与 MC 不匹配。我尝试了不同的 $methods 以及 OPENSSL_RAW_DATA | 的组合OPENSSL_ZERO_PADDING

我哪里出错了?

const n = "\n";
$text= 'hello my friends';
$method = 'AES-128-CBC';
$key = base64_decode('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA');
$text = base64_decode('MDEyMzQ1Njc4OUFCQ0RFRgAAAAYxMjM0NTYxMjMDAwM=');
$size = openssl_cipher_iv_length($method);
$iv = substr($key, 0, $size);

// MCRYPT METHOD
$module = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
mcrypt_generic_init($module, $key, $iv);
$mcrypt = mcrypt_generic($module, $text);

// OPENSSL METHOD
$method = 'AES-128-CBC';
$openssl = openssl_encrypt($text, $method, $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING, $iv);

echo "MC: " . base64_encode($mcrypt) . n;
echo "OS: " . base64_encode($openssl) . n;

/*
MC: 9+gMhSSAHhJ4g4rdjwP02YQJTfU2qEThBco+W9ob9UU=
OS: Qsz5HitF4X+2DV48wh7ExCjWjGEOAl88MKXk/g24Z/I=
*/

最佳答案

Mcrypts: MCRYPT_RIJNDAEL_128,MCRYPT_MODE_CBC

相当于:

OPENSSL: AES-256-CBC

我不知道为什么会有差异,但将 128 更改为 256 为我解决了这个问题。

关于php - 将 mcrypt_generic 转换为 openssl_crypt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48800725/

相关文章:

php - 这段代码是什么意思 : `$Odd = ($Odd == "even") ? "odd": "even";` ?

php - 学说 DQL JOIN

php - PHP 中的 JSON 和回调

Delphi - 与 Indy 组件的 SSL TCP 通信

ruby - 在 Mac OSX 10.6.8 上安装 ruby​​ 1.9.3 时安装日志中出现 Openssl 错误消息

node.js - 使用 nodejs crypto 与 php 的 mcrypt 解密 blowfish-ecb

php - 使用openssl命令行工具解密数据

php - mysqlnd mysql_connect 需要很长时间才能连接

c - SHA256 有 table cli 和 openssl 库

php - 在 PHP 中用于加密/解密的 Mcrypt 替代品?