2

我第一次尝试使用 Libsodium 进行加密,但我遇到了一个错误!我在 XAMPP 上运行所有东西,钠在 /ext/ 文件夹中,我已添加extension=sodium到 php.ini

这是我的代码:

<?php
// 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();

引发此错误:

<br />
<b>Warning</b>:  Use of undefined constant SODIUM_CRYPTO_SECRETBOX_KEYBYTES - assumed 'SODIUM_CRYPTO_SECRETBOX_KEYBYTES' (this will throw an Error in a future version of PHP) in <b>D:\xampp\htdocs\php\crypttest.php</b> on line <b>6</b><br />
<br />
<b>Fatal error</b>:  Uncaught TypeError: random_bytes() expects parameter 1 to be integer, string given in D:\xampp\htdocs\php\crypttest.php:6

我正在使用 PHP 7.2.10

更新

Ran get_loaded_extensions 和钠没有安装,我不知道为什么。php_sodium.dll存在于 ext 文件夹中,我已extension=sodium在 php.ini 中添加了其他可以正确加载的扩展。

4

1 回答 1

3

上周末我遇到了同样的问题。我有一个全新安装的 Windows 10 用作我的新开发机器我还安装了带有 Apache Netbeans 11.1 的 JDK 和一个新安装的 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);
      ?>

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

 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) 

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

于 2019-11-04T21:08:31.293 回答