使用 OpenSSL 解密字符串在终端中有效,但在 PHP 脚本中无效

2024-01-16

我正在尝试解密一个文件,我可以使用以下字符串在终端中使用 OpenSSL 对其进行解密。

openssl -enc -d -aes-192-ecb -in file.crypt -out file -K 0123456789abcdef -iv 0

但是,我想用 PHP 解密这个文件。我有以下代码:

$file = file_get_contents('file.crypt');
$key = 0123456789abcdef;
$data = mcrypt_decrypt(MCRYPT_RIJNDAEL_192, $key, $file, MCRYPT_MODE_ECB);

print_r($data);

显然我遗漏了一些东西,因为 PHP 脚本正在返回数据,但不是纯文本。

我尝试过使用 MCRYPT_RIJNDAEL_128 但没有成功。如果您能看到我做错了什么,请告诉我。提前致谢。

UPDATE


我已使用以下命令成功解密我的文件:

$key = pack('H*', '0123456789abcdef'); //In >= PHP 5.4 you can use hex2bin() I think.
$data = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $file, MCRYPT_MODE_ECB);

键和 IV 在openssl是十六进制的(因此太短),而 PHP 中的值被用作字符值。请在 openssl 中为 AES 密钥指定 32、48 或 64 个十六进制数字,并在 PHP 中为 16、24 或 32 字节指定相同的值。 IV 应始终为 32 个十六进制数字或 16 个字节,因为这是 AES 的块大小。

你应该总是使用MCRYPT_RIJNDAEL_128因为其中的 128 是算法的块大小(而不是密钥大小),MCRYPT_RIJNDAEL_192 and MCRYPT_RIJNDAEL_256算法做not实施 AES。

另外,openssl 默认为 PKCS#7 填充,请检查mcrypt_encryptPHP 的 PKCS 填充实现的注释部分 - 默认情况下不提供它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 OpenSSL 解密字符串在终端中有效,但在 PHP 脚本中无效 的相关文章

随机推荐