0

如何使用 PHP 5.5 版正确安装 Libsodium。我正在尝试按照https://paragonie.com/book/pecl-libsodium/read/00-intro.md#installing-libsodium上的说明进行操作

以下是我执行的步骤:

  1. 转到http://windows.php.net/downloads/pecl/releases/libsodium/1.0.6/

  2. 下载“php_libsodium-1.0.6-5.5-nts-vc11-x64.zip”并解压文件。

  3. 在我的目录“C:\Program Files (x86)\PHP\v5.5”中复制“libsodium.dll”,其中“php.exe”

  4. 在我的目录“C:\Program Files (x86)\PHP\v5.5\ext”中复制“php_libsodium.dll”

  5. 在 php.ini 文件中启用“extension=php_libsodium.dll”

  6. 重启服务器

但是当我通过编写一个简单的 PHP 测试文件对其进行测试时:

<?php
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

// hash the password and return an ASCII string suitable for storage
$hash_str = sodium_crypto_pwhash_str(
        "mypassword",
        SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE,
        SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE
        );

echo "hash: " . $hash_str;
?>

结果页面显示错误:

致命错误:在第 7 行的 C:\PHP\testLibsodium.php 中调用未定义的函数 sodium_crypto_pwhash_str()

Libsodium 库似乎没有安装,因为它不知道该功能。在 PHP 5.5 版中安装 PHP Libsodium 我需要做什么?非常感谢你。

更新:我已经按照@iann 的建议安装了 X86 版本并运行以下代码:

$storeInDatabase = \Sodium\crypto_pwhash_str(
        "safasfdwr32sfdfas234",
        SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE,
        SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE
        );

现在似乎正在读取该函数,但出现错误:

注意:使用未定义的常量 SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE - 假定为“SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE”

注意:使用未定义的常量 SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE - 假定为“SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE”

警告:Sodium\crypto_pwhash_str() 期望参数 2 很长

可捕获的致命错误:crypto_pwhash_str():无效参数

这是否意味着我的 libsodium 安装正确,但为什么会出现错误?再次感谢你。

4

1 回答 1

2

在库被移动到本机 PHP 7.2 之前,这些sodium_*函数不在全局命名空间中。从手册

在 7.2 之前的 PHP 和 PECL 的 libsodium 中,以下函数是在 Sodium 名称空间中定义的。在 PHP 7.2 中,命名空间被删除,取而代之的是 sodium_ 前缀(以符合 PHP 内部开发标准)。

因此,如果您从 PECL 安装,则需要使用以前的函数名称。在你的情况下:

$hash_str = \Sodium\crypto_pwhash_str(
...
于 2018-02-13T10:51:28.210 回答