gpt4 book ai didi

php - 为什么有些字符无法从 Linux/Bash 环境变量中提取到 PHP 中?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:54:43 25 4
gpt4 key购买 nike

我会尽量让它尽可能短,但不会让它完全不可读。

我使用 PHP 的 openssl 实现将加密数据集存储在我的数据库中。

这是与我正在做的类似的事情:

$pw = 'nobody loves you like I do.';
$cm = 'aes-256-cbc-hmac-sha256';
$c_key = '-$k���۱�d��o��ּ)2�"�C�!{���"�pO�⌧Ӝ�A��)mL�ڡ��i����OP753D8⮩eÒ98u07ף�11�u�e';
$iv = '�w�[(32';
$sslpw = openssl_encrypt($pw, $cm, $c_key, $options=0, $iv);

我填充 $c_key$iv 的值都是使用 openssl_random_pseudo_bytes() 生成的

所以,认为这里没有问题,我制作了一个小文件,其中包含所有这些值,以便像这样获取到环境变量中:

export PAXYZ_C_KEY='-$k���۱�d��o��ּ)2�"�C�!{���"�pO�⌧Ӝ�A��)mL�ڡ��i����OP753D8⮩eÒ98u07ף�11�u�e';
export PAXYZ_C_IV='�w�[(32'

但是,在我获取文件并将它们读入我的 PHP 脚本之后,我丢失了每个字符串的 50%,即使它们是字符串文字。

但是,如果我直接通过命令行设置环境变量,它设置得很好。问题是将其粘贴在文件中并将其设置在文件中。我什至不知道为什么这会有所作为,但确实如此。

如果我严格遵守 PHP,那么这些字符中的任何一个都没有问题。

我什至可以在什么级别诊断这个?我是复制粘贴到终端还是编辑器似乎并不重要——结果是一样的。但实际上,这是我的专业知识逐渐停止的地方。

不幸的是,我已经用我当前的 key 集完成了很多加密工作 - 所以如果没有必要,我不会太热衷于重新加密所有内容。

最佳答案

环境变量是 C 字符串,因此不能包含空字节。随机数据,如 openssl_random_pseudo_bytes() 的输出,通常包含空字节。您需要以保证它们不包含空字节的方式对这些函数的输出进行编码;一种直接的方法是在将它们放入环境变量之前使用 base64_encode()

关于php - 为什么有些字符无法从 Linux/Bash 环境变量中提取到 PHP 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56159530/

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