0

我想使用 ed25519 来签署我的消息。我发现 TweetNaCl.js 有Signatures方法来实现我的目标。

通过引用TweetNaCl.js 最小公钥签名示例和官方文档-签名,这是我的测试代码代码

  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.

但是我注意到,当我将publicKeyB64signatureB64和放入msgStrtweetnacl.js 的示例页面(公钥签名)以验证它时,它会响应 error Bad signature length: must be 64 bytes

如果我将其secretKeyB64放入示例签名页面,然后单击“签名”,则签名似乎比我从 Codesandbox 的代码中创建的要短。

有什么我错过的吗?

4

1 回答 1

0

我在 20 分钟后发现了这个问题......感谢 StackOverflow ?!

我控制台登录signature,发现它的长度超过了 64。在我查看 Signatures之后,我发现了另一种方法nacl.sign.detached(message, secretKey),它的长度是 64!

在 encodeBase64 后放到 tweetnacl.js 的示例页面(公钥签名)验证,就可以了!!

于 2021-09-10T13:19:28.020 回答