【问题标题】:TweetNaCl.js Public-key signatures example errTweetNaCl.js 公钥签名示例错误
【发布时间】: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一样。

但是我注意到,当我将publicKeyB64signatureB64msgStr 放到tweetnacl.js 的示例页面(Public-key signatures)进行验证时,它会响应错误Bad signature length: must be 64 bytes

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

我有什么遗漏的吗?

【问题讨论】:

    标签: javascript cryptography signature key-pair tweet-nacl


    【解决方案1】:

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

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

    encodeBase64后放到tweetnacl.js'example page(Public-key signatures)验证,就可以了!!

    【讨论】:

      猜你喜欢
      • 2021-02-21
      • 2010-10-05
      • 2013-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-17
      相关资源
      最近更新 更多