javascript - TweetNaCl.js 公钥签名示例错误
问题描述
我想使用 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
.
但是我注意到,当我将publicKeyB64
、signatureB64
和放入msgStr
tweetnacl.js 的示例页面(公钥签名)以验证它时,它会响应 error Bad signature length: must be 64 bytes
。
如果我将其secretKeyB64
放入示例签名页面,然后单击“签名”,则签名似乎比我从 Codesandbox 的代码中创建的要短。
有什么我错过的吗?
解决方案
我在 20 分钟后发现了这个问题......感谢 StackOverflow ?!
我控制台登录signature
,发现它的长度超过了 64。在我查看 Signatures之后,我发现了另一种方法nacl.sign.detached(message, secretKey)
,它的长度是 64!
在 encodeBase64 后放到 tweetnacl.js 的示例页面(公钥签名)验证,就可以了!!
推荐阅读
- amazon-web-services - 对多个实例使用一个 AWS 弹性 IP
- aws-cdk - 如何使用 aws cdk synth/deploy 显示堆栈跟踪
- python - 使用python将两个spark数据框合并到一个模式中
- excel - 如何在表格中找到最大值但范围不同?
- amazon-dynamodb - Dynamodb GetBatchItem 与查询
- compiler-construction - 转换为巴库斯-瑙尔形式
- xml - Excel 中的 Power Query 出现错误
- excel - 最后 4 个结果的总和形成具有多个条件的列
- javascript - 如何将 webpack 生成的输出文件导入到已经安装了输出文件中的模块的应用程序中?
- python - 有没有办法使用 IMDbPY 提取 IMDb 评论?