我第一次尝试使用 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 的未来版本中引发错误)位于第6行D:\xampp\htdocs\php\crypttest.php致命错误:未捕获 TypeError: random_bytes()期望参数 1 为整数,字符串在 D:\xampp\htdocs\php\crypttest.php:6 中给出
get_loaded_extensions()显示钠未安装,我不明白为什么。php_sodium.dll文件存在于 ext 文件夹中,我已将其添加 …
在InteliJ中调试Java期间,变量名中的美元符号是什么意思?是关闭吗?请查看下面的图片和代码段。
这是Stream类的一部分:
public final Listener listen(final Handler<A> action) {
return listen_(Node.NULL, new TransactionHandler<A>() {
public void run(Transaction trans2, A a) {
action.run(a);
}
});
}
Run Code Online (Sandbox Code Playgroud)
我怀疑$1in Stream$1@915指的是在上述方法中创建的闭包。我不确定。有人可以确认吗?或如果不是这种情况,请说明在此生成的名称中美元符号的含义是什么?
该代码取自Sodium Functional Reactive库,我正在尝试了解其工作原理。

我正在对新库“Libsodium”进行一些实验。基于https://www.zimuel.it/slides/zendcon2018/sodium#/21幻灯片。这张幻灯片中有一个有关钠加密和解密的示例。
$msg = 'This is a super secret message!';
// Generating an encryption key and a nonce
$key = random_bytes(SODIUM_CRYPTO_SECRETBOX_KEYBYTES); // 256 bit
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES); // 24 bytes
// Encrypt
$ciphertext = sodium_crypto_secretbox($msg, $nonce, $key);
// Decrypt
$plaintext = sodium_crypto_secretbox_open($ciphertext, $nonce, $key);
echo $plaintext === $msg ? 'Success' : 'Error';
Run Code Online (Sandbox Code Playgroud)
我在 PHP 类方法中使用了它,如下所示:
public function sodium_encrypt($p_sPlaintext)
{
try{
if(!empty($p_sPlaintext) && is_string($p_sPlaintext)){
// Generating an encryption key and a nonce
$key = random_bytes(SODIUM_CRYPTO_SECRETBOX_KEYBYTES); // 256 bit
$nonce = …Run Code Online (Sandbox Code Playgroud) 我正在尝试sodium在 Ubuntu 系统上安装一个在 R 中调用的软件包,但收到如下错误消息:
install.packages("sodium", dependencies = T)
...
* installing *source* package ‘sodium’ ...
** package ‘sodium’ successfully unpacked and MD5 sums checked
Package libsodium was not found in the pkg-config search path.
Perhaps you should add the directory containing `libsodium.pc'
to the PKG_CONFIG_PATH environment variable
No package 'libsodium' found
Using PKG_CFLAGS=
Using PKG_LIBS=-lsodium
------------------------- ANTICONF ERROR ---------------------------
Configuration failed because libsodium was not found. Try installing:
* deb: libsodium-dev (Debian, Ubuntu, etc)
* rpm: libsodium-devel …Run Code Online (Sandbox Code Playgroud) Amazon Linux 2023 上缺少 php-sodium,并且无法轻松安装。所以我将把解决方案放在这里作为答案。
预计在 Amazon Linux 2023 上安装 php-sodium/libsodium,但没有简单的方法,因为 amazon-linux-extras 也未包含在内
如何能在电视频道的问题,因为在此解释的谈话在第31分钟的中通过RX解决?
Rx中表达的问题如下:
两个电视频道(channel1和channel2)传输图像流,加上其中的流fuzz表示没有频道或白噪声.
有两个按钮可以发送事件eButton1和eButton2按下它们.
按下这些按钮应该导致各个通道被发送到屏幕.
每个按钮按下应该被投影(映射)到相应的频道,然后所有频道组合成选择流作为以流开始的fuzz流的流.最后,交换机操作员将选定的流发送给screen.
什么相当于Sodiumswitch并在RX中合并?
是否有可能用纯高阶函数解决它?即不使用闭包?我不明白这是怎么可能的.

sodium ×7
php ×3
libsodium ×2
amazon-linux ×1
c# ×1
cryptography ×1
debugging ×1
elm ×1
encryption ×1
java ×1
r ×1
ubuntu ×1
ubuntu-18.04 ×1