我正在使用Libsodium-PHP,并且看到ParagonIE_Sodium_Compat::crypto_pwhash
函数从命令行调用与在运行该应用程序的应用程序中调用时产生不同的结果(具有相同的参数) PHP-FPM。
只需确保您安装的操作系统等效于php7.2-sodium 包,当您安装PHP时,所有这些步骤都应该 为您照顾。
phpinfo();
显示:
sodium support enabled
sodium compiled version 2.0.12
libsodium headers version 1.0.11
libsodium library version 1.0.11
但是对于CLI,它显示:
sodium support => enabled
libsodium headers version => 1.0.16
libsodium library version => 1.0.16
我的假设是,不同的Libsodium版本可能是导致crypto_pwhash
函数产生不同结果的原因。
那么如何将Libsodium扩展名从1.0.11升级到1.0.16?
P.S。我知道crypto_pwhash
的CLI版本正在产生我想要的输出,因为它与Libsodium-js(demo fiddle here)的输出匹配。
答案 0 :(得分:1)
libsodium和libsodium-php不是同一个人。
要对其进行升级,您必须从源代码构建libsodium-php
并将其链接到libsodium
版的1.0.16
标头和库。
php7.2-sodium
的维护者显然将其与1.0.11
关联-
甚至/etc/php.d
和/etc/php-cli.d
都可能引用不同的模块
如果libsodium-php
已与软件包管理器或pecl一起安装;
最好先卸载它-然后您可以尝试从源代码构建libsodium-php
(首先是yum install php-devel re2c
):
...
cd libsodium-1.0.16
sudo cp ./src/libsodium/.libs/libsodium.so.23 /usr/lib64/libsodium.so.23
sudo cp ./src/libsodium/.libs/libsodium.so.23.1.0 /usr/lib64/libsodium.so.23.1.0
cd ..
git clone https://github.com/jedisct1/libsodium-php.git
cd libsodium-php
phpize
./configure --help
./configure
make
# sudo make install
sudo cp ./modules/sodium.so /usr/lib64/php/modules/sodium.so
# sudo cp ./modules/sodium.so /usr/lib64/php-zts/modules/sodium.so
sudo echo "extension=sodium.so" > /etc/php-cli.d/sodium.ini
sudo cp /etc/php-cli.d/sodium.ini /etc/php.d/sodium.ini
# sudo cp /etc/php-cli.d/sodium.ini /etc/php-zts.d/sodium.ini
sudo systemctl restart httpd.service
php -r "phpinfo();" | grep sodium
/etc/php-cli.d/sodium.ini,
sodium support => enabled
sodium compiled version => 2.0.12
libsodium headers version => 1.0.16
libsodium library version => 1.0.16
在为CLI和SAPI手动安装后,...我找到了pecl-libsodium的文档;这说明了相同的内容:
如果获得不同的数字,则将无法使用libsodium 1.0.14中应具有的某些功能。如果需要它们,则需要经过从源代码进行编译的仪式(如上所示)。
仍然无法使其在zts
下工作(线程安全);这些路径应该是系统上的fpm
(非线程安全的)(并且可以将其链接到默认的PHP标头;无需修补)……尽管如此,php-cli
和{{添加模块和php-fpm
时需要考虑1}}。