3

我在启用 Argon2 进行密码散列时遇到问题。我正在从 Amazon Linux 2 的源代码构建 PHP,但是一旦构建完成并编译 PHP,PASSWORD_ARGON2I常量未定义且算法不可用。

我尝试了许多不同的方法来使用不同的库来编译 PHP,但它们都没有给我我需要的 Argon2 算法。下面我将列出我已采取的一些步骤:

1) 送旗--with-sodium

使用此标志编译完成,但运行包含该函数的测试脚本password_hash()显示 Argon2I 不可用。

2) 使用标志编译--with-password-argon2

由于缺少库,这无法编译,这可以在下面的错误中看到。

checking for Argon2 support... yes
checking for Argon2 library... not found
configure: error: Please ensure the argon2 header and library are installed

由此,我假设我缺少标志工作所需的库,因此我安装了Libsodium。再试一次也有同样的结果。

3)接下来,我会根据教程中的建议安装更多依赖项。它们是: - argon2 - libargon2-0 - libargon2-0-dev

这确实给了我argon2可以工作的 cli 工具,但是再次编译 PHP 并不能解决同样的错误。

在这一点上,我不确定我的下一步是什么,任何帮助将不胜感激。

4

3 回答 3

1

尝试在运行 PHP72 的 Cloud9 EC2 实例上安装 LexikJWTAuthenticationBundle 时收到Argon2i not supported..错误。经过大量研究,我想出了一个解决方案。

以下是要遵循的步骤。

安装 libsodium:

$ sudo yum install libsodium-devel

安装后,如果你运行这个命令来查看你的 PHP 模块,你会看到 libsodium 被列出来,但它并不存在。

$ php -m 

该软件包实际上是作为 sodium.so 而不是 libsodium.so 安装的(也许这是问题的根源?)要让 PHP 加载模块,需要一些手动步骤。

转到 PHP 查找已安装模块的目录。

$ cd /etc/php.d

创建一个指向 sodium.so 包的文件。

$ sudo touch libsodium.ini

授予文件读/写权限。

$ sudo chmod 666 20-libsodium.ini

在编辑器中打开文件。我喜欢用vim。

$ vi libsodium.ini

单击“i”键进入插入模式并粘贴以下内容:

; Enable sodium extension module
extension=sodium.so

通过单击转义键并键入以下内容来保存文件:

:wq!

现在,如果您通过键入 php -m 查看已安装的 PHP 模块,您将看到列出的 libsodium。

此时,您应该能够运行任何引发 Argon2i 错误的程序。

仅供参考,我不是 PHP 开发人员,也不是 AWS 专家,但我必须完成这项工作才能在 EC2 上部署公司 PHP 应用程序。因此,如果您对上述内容有任何疑问,我可能无法提供帮助..但我会尝试 ;)

于 2019-05-09T23:16:25.263 回答
0

sudo yum install -y libargon2 libargon2-devel

这对我有用。

于 2020-10-07T14:35:15.183 回答
0

我能够解决这个问题。我创建了一个新的 AWS Amazon Linux 2 实例并按照以下步骤操作:

安装 Argon2

sudo -s
git clone https://github.com/P-H-C/phc-winner-argon2.git
cd phc-winner-argon2
make
make test
make install PREFIX=/usr
cp /usr/lib/libargon2.so.1 /lib64/

导航回父目录

cd ..

安装 PHP 7.3.5

wget https://www.php.net/distributions/php-7.3.5.tar.gz
tar -zxvf php-7.3.5.tar.gz
cd php-7.3.5
./configure --with-password-argon2
make 
make test
make install
exit

导航回父目录

cd ..

检查您的 PHP 版本

php --version

创建以下 PHP 脚本 (pwd.php)。

<?php

  error_reporting(E_ALL);

  $hash = \password_hash('password', PASSWORD_ARGON2ID);
  echo "$hash\n";

?>

执行 PHP 脚本以测试 Argon2 功能

php pwd.php

您将收到类似于以下内容的输出:

$argon2id$v=19$m=1024,t=2,p=2$dlB2SWdpUEFYZE9RSWNmQg$JGWNTXEomWX1hyM8OfzkRNx5C3zmBu3sqKU1hwohNOU
于 2019-05-17T00:00:08.490 回答