PHP 钠未安装?

zug*_*789 5 php cryptography sodium

我第一次尝试使用 Libsodium 进行加密,但遇到了错误。我在 XAMPP 上运行所有内容;钠位于 /ext/ 文件夹中,我已将其添加extension=sodium到 php.ini 文件中。

这是我的代码。

// This refers to the previous code block.
require "safeCrypto.php"; 

// Do this once then store it somehow:
$key = random_bytes(SODIUM_CRYPTO_SECRETBOX_KEYBYTES);
$message = 'We are all living in a yellow submarine';

$ciphertext = safeEncrypt($message, $key);
$plaintext = safeDecrypt($ciphertext, $key);

echo $ciphertext;
echo $plaintext;
echo phpversion();
Run Code Online (Sandbox Code Playgroud)

它抛出这个错误。

警告:使用未定义的常量 SODIUM_CRYPTO_SECRETBOX_KEYBYTES - 假设“SODIUM_CRYPTO_SECRETBOX_KEYBYTES”(这将在 PHP 的未来版本中引发错误)位于第6D:\xampp\htdocs\php\crypttest.php致命错误:未捕获 TypeError: random_bytes()期望参数 1 为整数,字符串在 D:\xampp\htdocs\php\crypttest.php:6 中给出

get_loaded_extensions()显示钠未安装,我不明白为什么。php_sodium.dll文件存在于 ext 文件夹中,我已将其添加extension=sodiumphp.ini 文件中。

我正在使用 PHP 7.2.10。

Joh*_*ijn 8

上周末我也遇到了同样的问题。我全新安装了 Windows 10 作为我的新开发机器 我还安装了 JDK 和 Apache Netbeans 11.1 以及新安装的 XAMMP (xampp-windows-x64-7.3.11-0-VC15-installer) 安装后我修改了php.ini 取消注释“extension=sodium”,并开始使用 xampp shell 中的命令“php -m”检查 php 中的钠是否处于活动状态。在那里我看到钠模块已加载。

在我的 test.php 中,我输入了以下行:

     <?php
       echo random_bytes(SODIUM_CRYPTO_SECRETBOX_KEYBYTES);
      ?>
Run Code Online (Sandbox Code Playgroud)

检查它是否有效。不幸的是我得到了一个错误:

 Warning: Use of undefined constant SODIUM_CRYPTO_SECRETBOX_KEYBYTES - assumed 'SODIUM_CRYPTO_SECRETBOX_KEYBYTES' (this will throw an Error in a future version of PHP) 
Run Code Online (Sandbox Code Playgroud)

我在这个论坛和其他论坛上进行了扩展研究以找到答案,但直到我尝试了 Jim 的方法(/sf/answers/3440008701/)后才找到答案,他确实回到了 php 的早期版本,但答案就在他的第4步中。将libsodium.dll复制到“apache/bin”文件夹中。利钠起作用了!我完全卸载了Xampp并再次尝试。结果相同。您需要做的就是将 libsodium.dll 从“xampp/php”文件夹复制到“xampp/apache/bin”文件夹,当然,取消注释 php.ini 中的扩展名,然后就可以了。