Javascript TweetNaCl.js最小公钥签名示例

Javascript TweetNaCl.js最小公钥签名示例,javascript,node.js,cryptography,tweet-nacl,Javascript,Node.js,Cryptography,Tweet Nacl,我试图理解如何使用纯javascript实现一个基于演示的最小基本公钥签名示例 我的研究还没有产生一个简单的javascript示例,我无法用它来理解它的内部工作原理,目前这个问题已经超出了我的理解范围 我试着看了一下演示的图片,但它并没有透露它的秘密 图书馆也没有这样的例子 密码学对我来说是非常新的东西,因此任何关于如何在node.js中使用纯javascript创建公钥示例的基线示例都将非常感谢 伪代码ish: const nacl = require('tweetnacl') let me

我试图理解如何使用纯javascript实现一个基于演示的最小基本公钥签名示例

我的研究还没有产生一个简单的javascript示例,我无法用它来理解它的内部工作原理,目前这个问题已经超出了我的理解范围

我试着看了一下演示的图片,但它并没有透露它的秘密

图书馆也没有这样的例子

密码学对我来说是非常新的东西,因此任何关于如何在node.js中使用纯javascript创建公钥示例的基线示例都将非常感谢

伪代码ish:

const nacl = require('tweetnacl')
let message = "This is my unencrypted message"
let naclPair = nacl.sign.keyPair()
let signedMessage = nacl.sign(message, naclPair.secretKey)
let decrypted = nacl.sign.open(signedMessage, naclPair.publicKey) // is this right?
console.log(decrypted) // should this print the decrypted message?
顺便说一句,我对node.js
require
比对ES6
import
更熟悉,如果这与这里的答案有任何关系,并且可以帮助演示如何使用此库的话。

是的JavaScript端口。TweetNacl是的一个紧凑实现,它提供了基本上基于的各种加密和签名算法。许多平台都有NaCl兼容的实现或包装,因此这些文档中的任何一个都可以用于介绍,例如fork的清晰文档

TweetNaCl.js的文档还简要介绍了该功能:创建由64字节签名和附加消息组成的签名消息。使用签名验证消息,如果验证成功,则返回消息。用于签名的算法是

如评论中所述,您没有明确区分加密(目的:保密)和(目的:身份验证/完整性)。特别是,信息的保密性不是签名的目的。例如,当返回的
nacl.sign()
包含未加密的消息时(请参见下面的代码片段),这一点就变得很明显。但是,使用私钥加密确实是在签名期间执行的(但不是为了保密)

以下实现是纯JavaScript实现:

var-keyPair=nacl.sign.keyPair();
var secretKey=keyPair.secretKey;
var publicKey=keyPair.publicKey;
var msgStr=“敏捷的棕色狐狸跳过懒狗”;
var msg=nacl.util.decodeUTF8(msgStr);
var signature=nacl.sign(msg,secretKey);
var signatureB64=nacl.util.encodeBase64(签名);
log(signatureB64.replace(/(.{64})/g,'$1\n');//显示签名加消息(Base64编码)
var signatureMsgPart=signature.slice(64);
console.log(nacl.util.encodeUTF8(signatureMsgPart));//Display message from nacl.sign()返回值:签名不用于加密!
var-verifiedMsg=nacl.sign.open(签名,公钥);
console.log(nacl.util.encodeUTF8(verifiedMsg));//验证成功后显示消息


只要看看他们GitHub上的示例和自述,就知道这是对的。但请注意,在对消息签名时,它不是“加密的”,而是“已签名的”。如果你想学习密码学,我建议你从密码学背后的数学开始,用C语言实现。这应该比数学更透明。祝你好运@维克多:谢谢你的评论。我正在寻找如何在不需要学习C的情况下将TweetNaCL.js库与javascript结合使用,因为这就是库存在的原因。我只需要正确的轻推就可以了。有人能帮忙吗?太好了,谢谢!在这一点上,我的意图只是为了消息的完整性。