我想使用ed25519对我的消息进行签名。我找到了具有Signatures方法的TweetNaCl.js来实现我的目标。
通过引用TweetNaCl.js minimal Public-key signatures example和官方文档-Signatures,下面是我的测试代码codesandbox。
const keyPair = nacl.sign.keyPair();
const secretKey = keyPair.secretKey;
const publicKey = keyPair.publicKey;
const secretKeyB64 = encodeBase64(secretKey);
const publicKeyB64 = encodeBase64(publicKey);
console.log("secretKeyB64", secretKeyB64);
console.log("publicKeyB64", publicKeyB64);
const msgStr = "My unencrypted message";
const msg = decodeUTF8(msgStr);
const signature = nacl.sign(msg, secretKey);
const signatureB64 = encodeBase64(signature);
console.log("signatureB64", signatureB64);
const verifiedMsg = nacl.sign.open(signature, publicKey);
console.log(encodeUTF8(verifiedMsg));encodeUTF8(verifiedMsg)的控制台日志看起来没有问题,和msgStr一样。
但我注意到,当我将publicKeyB64、signatureB64和msgStr放到tweetnacl.js的示例页面(Public-key signatures)中进行验证时,它会响应错误Bad signature length: must be 64 bytes。
如果我将secretKeyB64放入示例签名页面,然后单击" sign ",签名似乎比我在Codesandbox的代码中创建的签名更短。
我有什么遗漏的吗?
发布于 2021-09-10 13:19:28
我在20分钟后解决了这个问题...谢谢你的StackOverflow ?!!
我通过控制台登录了signature,发现它的长度超过64。在我检查了Signatures之后,我发现了另一个方法nacl.sign.detached(message, secretKey),它的长度是64!
在encodeBase64之后,并将它放到tweetnacl.js的示例页面(公钥签名)来验证它,它工作了!!
https://stackoverflow.com/questions/69132331
复制相似问题