【发布时间】:2021-11-06 22:54:56
【问题描述】:
我想使用 ed25519 来签署我的消息。我发现 TweetNaCl.js 有 Signatures 方法来实现我的目标。
通过引用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 放入示例签名页面,然后单击“签名”,签名似乎比我从 Codesandbox 的代码创建的要短。
我有什么遗漏的吗?
【问题讨论】:
标签: javascript cryptography signature key-pair tweet-nacl