0

(为清楚起见进行了编辑-在接受的答案中滚动)

Libsodium 已经为 PHP 7 做好了准备。在此过程中,命名空间被删除,并添加了用于方法的前缀 sodium_ 和用于常量的 SODIUM_ 前缀。版本方法也被删除。

此 github 页面记录了所有新函数和常量,并且该项目提供与 \Sodium 命名空间的向后兼容性:https ://github.com/Firehed/sodium/blob/master/src/we_cant_have_nice_things.php

配方:在 PHP 7 和 AWS AMI 上安装 Libsodium

# PHP 7.0 Libsodium install AWS AMI
yum install -y php7-pear re2c php70-devel
yum groupinstall -y "Development Tools"

pecl7 install libsodium

vi /etc/php-7.0.d/20-libsodium.ini
    ; Enable libsodium extension module
    extension=sodium.so

service httpd restart

命令行测试以验证是否安装了钠

php7 --info | grep sodium

测试 php 函数以验证密码哈希的调用模式

<?php
$password = "hello";
$hash_str = sodium_crypto_pwhash_str(
    $password,
    \SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE,
    \SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE
);
var_dump($password, $hash_str);

感谢@GracefulRestart 的帮助。

4

2 回答 2

1

我在这里看到了几个问题,第一个是您的测试文件似乎无法正常工作。

在 PHP 7 中使用 libsodium 运行测试代码会返回以下错误:

PHP Fatal error:  Uncaught Error: Call to undefined function Sodium\\library_version_major() 

如果要查看版本,从 phpinfo() 函数中搜索数据可能更容易:

<?php phpinfo(); ?>
# or from CLI
php7 --info |grep sodium

我注意到的另一个问题是在您的安装步骤中,您从源代码和 PECL 安装 libsodium。该make install命令默认将库放在 /usr/local/lib 中,而pecl7 install libsodium通常会将库安装到默认的 PHP 模块目录中。

如果您尝试从源代码安装,您的 /etc/php-7.0.d/20-libsodium.ini 文件不正确,因为它正在加载您从 PECL 安装的 libsodium 库(您可以通过检查来检查它从哪个目录加载来自 phpinfo()) 的 extension_dir ini 设置。

如果只需要从 PECL 安装,则不需要所有的开发包或任何手动编译。

编辑我修改了您发布的配方,以删除下载源代码的无关步骤,只需使用 PECL 完成所有操作:

yum install -y php7-pear re2c php70-devel
yum groupinstall -y "Development Tools"
# PHP 7.0
pecl7 install libsodium
vi /etc/php-7.0.d/20-libsodium.ini
    ; Enable libsodium extension module
    extension=sodium.so
service httpd restart

如果您的发行版的 YUM 存储库提供 php7-libsodium 包,那将是一个更小的配方

希望有帮助

于 2017-08-03T20:30:03.030 回答
1

这是我对这个食谱的解决方案。

wget -c https://download.libsodium.org/libsodium/releases/libsodium-1.0.18.tar.gz 
tar -xvf libsodium-1.0.18.tar.gz  
cd libsodium-1.0.18 
./configure
make && make check
make install
sudo pecl7 install -f libsodium

pecl7 应该安装和修改 php.ini 文件以在 php.ini 中包含以下内容

extension="sodium.so"

如果您在 Elastic Beanstalk 中运行 PHP,则以下文件 ./ebextentions/script.config :

files:
  "/opt/elasticbeanstalk/hooks/appdeploy/pre/001_libsodium.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/usr/bin/env bash
      wget -c https://download.libsodium.org/libsodium/releases/libsodium-1.0.18.tar.gz && tar -xvf libsodium-1.0.18.tar.gz &&  cd libsodium-1.0.18 && ./configure && make && make check && sudo make install && sudo pecl7 install -f libsodium
于 2019-06-24T11:59:51.473 回答