gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 21:37:27 26 4
gpt4 key购买 nike

我正在尝试解密一个文件,我可以使用以下字符串在终端中使用 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 但没有成功。如果您能看到我做错了什么,请告诉我。提前致谢。

更新


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

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

最佳答案

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

您应该始终使用 MCRYPT_RIJNDAEL_128,因为其中的 128 是算法的 block 大小(而不是 key 大小)、MCRYPT_RIJNDAEL_192MCRYPT_RIJNDAEL_256 code> 算法实现 AES。

此外,openssl 默认使用 PKCS#7 填充,请检查 mcrypt_encrypt 注释部分以了解 PHP 的 PKCS 填充的实现 - 默认情况下不提供它。

关于php - 使用 OpenSSL 解密字符串在终端中有效,但在 PHP 脚本中无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21069658/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com