问题标签 [libsodium]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - crypto_box_easy 和 crypto_box_open_easy 的奇怪行为。不用私钥解密?
我已经通过 libsodium 测试了公钥密码学并遇到了一个奇怪的行为。加密的消息在没有私钥的情况下被解密。
来自官方网站libsodium的示例
使用公钥认证加密,Alice 可以使用 Bob 的公钥加密专门为 Bob 发送的机密消息。
使用 Alice 的公钥,Bob 可以在最终解密之前验证加密消息实际上是由 Alice 创建的并且没有被篡改。
Bob 只需要 Alice 的公钥、nonce 和密文。
为了向 Bob 发送消息,Alice 只需要 Bobs 的公钥。
在原始示例中,Bob 使用自己的密钥解密来自 Alice 的消息,并使用 Alice 的公钥对其进行验证。我在代码中犯了一个错误,并且在没有 Bob 的私钥的情况下正确解密了消息!
怎么可能?我的错误在哪里?谢谢
javascript - 在服务器上使用 Kalium,在客户端使用 libsodium.js
我是一个尝试 NaCl 包装的新手。我在我的服务器上使用 Kalium,在我的客户端上使用 libsodium.js,它们都在工作,但是当我尝试使用经过身份验证的加密在两端之间进行通信时,密文验证失败。客户端上的加密通过以下方式完成:
nonce、serverPublicKeyBytes 和 clientPrivateKey 作为 Base64 字符串传输到服务器。
在服务器中,数据使用以下方式解密:
在服务器中,包装器使用 java byte[],而在服务器上,javascript 使用 UInt8Array[],有人可以帮助我启用客户端-服务器通信。
提前致谢
encryption - 私钥泄露,如何分发新的公钥?通过非对称密钥加密的客户端服务器模型
我正在尝试通过 libsodium 为应用程序设置客户端/服务器通信。到目前为止,我计划使用硬编码的公钥分发应用程序。服务器将保留其秘密密钥,而不会共享它。这应该让用户加密消息并将它们发送到服务器,密钥在那里解密消息。
如果服务器上的密钥被泄露(我不确定如何泄露,但以防万一)如何将新的公钥分发给所有客户端?有没有一种方法可以在不需要分发新公钥的情况下生成新的密钥?就像是:
我希望有一个非常简单的解决方案,不需要复杂的算法来安全地分发新的公钥。如果必须在制作新公钥的同时制作新的私钥,那么可以使用哪些算法将公钥从服务器安全地分发到客户端?
附加信息(随意跳过):
我们可以在这里阅读Glenn Fiedler(使用 libsodium 的 libyojimbo 的作者)谈到“只需滚动一个新的私钥”的想法。
如果有办法重用旧公钥并使用 libsodium 创建新私钥,我很乐意阅读它。我已经浏览了文档,但还没有看到任何功能。所以我担心我可能不得不深入研究更复杂的算法来安全地分发新的公钥。
我已经检查了Diffie Hellman,但似乎需要双方从一个共同的“颜色”开始。所以我想我的问题是关于达成新的商定起始颜色。
node.js - 在 Node 中使用 libsodium.crypto_pwhash (Argon2)
crypto_pwhash_str
我在我的 Node 项目中工作时遇到了麻烦。我正确导入了 libsodium-wrappers-sumo 和 libsodium-sumo 库,并且能够成功调用其他函数。我对有问题的函数的调用如下所示:
在这种情况下,密码只是一个带有字母“a”的字符串对象。
当我运行调试器并试图找出问题所在时,我得到了这个内部代码块:
由于某种原因,它无法进入 for 循环并且对_crypto_pwhash_str()
评估的调用。-1
有没有人对这个库有任何经验或者可以帮助我找出我做错了什么。对 Node 来说相当新,所以我很迷茫。
javascript - 我正确地散列密码吗?
我目前的项目是我在 Node.js 中的第一个项目(如果重要的话,也使用 MongoDB、Mongoose 和 Express),并且很容易分心,我在决定如何处理用户身份验证时掉进了加密的兔子洞。(此项目不需要其他加密)。
遵循此页面上的模式(模式,而不是代码 - 我在安装 node.bcrypt 时遇到问题,但在安装 node-sodium 时遇到问题)以及此页面上我的流程是
新用户通过 https 提交密码
模式生成盐
架构散列密码和盐的串联
架构存储盐和密码以及用户信息
现在我不知道这是否是我个人的缺陷,但我在遵循libsodium 文档时遇到了麻烦。node-sodium不提供任何额外的散列信息(尽管它确实有一个加密示例)。
这是我想用来生成哈希的代码:
所以问题是两个部分。这是一个好的过程,代码是否合适?
c++ - C++ - 对“sodium_init”的未定义引用
我正在尝试使用libsodium制作测试应用程序,但是出现错误:
我运行以下命令以 root 用户身份安装。
这是有问题的代码。
我使用CodeLite作为我的 IDE,我的 C++ 编译器选项如下:
选项是默认的,我添加-lsodium
到列表中。
尝试main.cpp
使用以下命令直接从终端编译g++ -lsodium main.cpp
会引发相同的错误。
有人可以帮我解决我的问题。
node.js - 我对密码哈希有什么误解?
我的理解是,当输入相同的数据时,哈希函数将始终返回相同的结果。但我一直在使用 libsodium(通过 node-sodium),但事实并非如此。
我的架构中有这个:
我用该代码记录了三个不同的字符串。例如
现在每一个的第一部分都是相同的,这让我觉得提交的密码部分是相同的(因为它是被散列的缓冲区的第一部分)。所以也许这是我不明白的缓冲区。
但如果buf
保持静止,为什么其余部分会saltedPassBuff
发生变化?
编辑:我不小心提交的时候还没有写完,编辑完成写完问题
java - 如何在纯 Java 中创建或打开与 libsodium 兼容的密封盒
libsodium 提供了一个 API 来创建或打开此处记录的密封盒https://download.libsodium.org/doc/public-key_cryptography/sealed_boxes.html
我怎样才能在纯 Java 中实现相同的功能,以便我可以打开一个由 libsodium 创建的盒子或创建一个 libsodium 可以打开的盒子?
swift - Swift Sodium - 匿名加密(密封盒)
我正在尝试使用带有给定公钥的快速钠来加密值。但是,加密值与服务器端生成的值不同。我不确定这段编码是否正确。这些步骤类似于它在 java 中的完成方式。
假设公钥是 base64 字符串格式。
爪哇:
迅速:
请告诉我快速等效编码有什么问题。非常感谢。
php - 无法加载动态库“php_libsodium”
我正在尝试安装 libsodium php 扩展(https://pecl.php.net/package/libsodium/1.0.6/windows)。
当我运行时php -m
,libsodium 会出现在列表中。但是,当我去 phpinfo 时,它没有列出。
我还注意到 apache 给了我错误:PHP Warning: PHP Startup: Unable to load dynamic library 'C:\\xampp\\php\\ext\\php_libsodium.dll' - The specified module could not be found.\r\n in Unknown on line 0
我已经检查了多次,文件肯定在那里并且匹配正确的架构和线程安全,所以我不知道还有什么可能导致这种情况。
任何帮助,将不胜感激。