gpt4 book ai didi

php - openssl_encrypt、openssl_decrypt key 、iv

转载 作者:搜寻专家 更新时间:2023-10-31 20:39:45 34 4
gpt4 key购买 nike

根据 OpenSSL ( https://www.openssl.org/docs/apps/enc.html#OPTIONS ) 的文档,他们期望 keyivhex-digit 值>;这是否意味着只有数字?还是 md5 散列会起作用? (因为 md5 似乎不可逆)

  • 请注意,我提到了 keyiv,因为 PHP 函数 openssl_encrypt 中的 $password 实际上 是关键。

(几乎)直接来自 PHP 注释 ( http://php.net/manual/en/function.openssl-encrypt.php )

function strtohex($x) 
{
$s='';
foreach (str_split($x) as $c) $s.=sprintf("%02X",ord($c));
return($s);
}

$source = 'It works !';

$iv = substr( md5( "123sdfsdf4567812345678" ), 0, 16 );
$pass = '1234567812345678';
$method = 'aes-256-cbc';

echo "\niv in hex to use: ".$iv;
echo "\nkey in hex to use: ".strtohex($pass);
echo "\n";

file_put_contents ('./file.encrypted',openssl_encrypt ($source, $method, $pass, true, $iv));

$exec = "openssl enc -".$method." -d -in file.encrypted -nosalt -nopad -K ".strtohex($pass)." -iv ".$iv;

echo 'executing: '.$exec."\n\n";
echo exec ($exec);
echo "\n";

最佳答案

您的第一个链接是关于命令行工具的,而不是 PHP 函数。您很难在终端中输入二进制数据,因此必须对那里的 key 进行十六进制编码。

然而,在 PHP 中,openssl_encrypt()openssl_decrypt() 需要原始二进制字符串。

该文档还具有误导性,因为它提到的是“密码”而不是“ key ”。你已经注意到了,但是加密 key 不是你应该通过键盘输入的东西,md5()-ing 任何东西也 never加密 key 。 key 必须通过 openssl_random_pseudo_bytes() 随机生成(或者至少这是对您的情况最方便的方法):

$key = openssl_random_pseudo_bytes(32);

(IV 也一样)

如果您需要对生成的 $key 进行十六进制编码,只需将其传递给 bin2hex(),但是您给出的示例有点破...你在做双重加密。通过PHP加密文件内容就足够了,你不需要处理命令行。

请注意,我的回答与进行加密的全部内容相去甚远。您还应该添加身份验证、适当的填充、仔细考虑如何管理和存储您的 key 等。

如果您想了解它,这里有一篇相当简短但仍然具有描述性的博客文章,它为您应该涵盖的关键点提供了正确的答案:http://timoh6.github.io/2014/06/16/PHP-data-encryption-cheatsheet.html

如果您需要的只是简单地完成工作 - 使用流行的加密库,不要自己编写。

关于php - openssl_encrypt、openssl_decrypt key 、iv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25538106/

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