首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Node.js verify.verify()奇怪行为

Node.js verify.verify()奇怪行为
EN

Stack Overflow用户
提问于 2018-09-28 17:39:47
回答 1查看 110关注 0票数 1

我一直在开发一个数字签名node.js应用程序,后来我遇到了一些奇怪的行为,但我还是搞不懂。

首先,我以在此描述的形式生成了公钥/私钥对

然后,我实现了以下脚本

代码语言:javascript
复制
  const crypto = require('crypto');
  const fs = require('fs');
  const privateKey = fs.readFileSync('./private_key.pem');
  const publicKey = fs.readFileSync('./public_key.pem');
  const hashAlg = 'sha256'
  const data = Buffer.from('test signature'.repeat(100), 'utf8');

  let bytes = []
  // sign
  const sign = crypto.createSign(hashAlg);
  sign.update(data);
  const signature = sign.sign(privateKey);
  fs.writeFileSync(`./signature.${hashAlg}`, publicKey);
  const verifier = crypto.createVerify(hashAlg);
  verifier.update(data);
  const result = verifier.verify(publicKey, signature);
  for(let i=0; i < publicKey.length ; i++){
    try{
      const verifier2 = crypto.createVerify('RSA-SHA256');
      verifier2.update(data);
      const invalidPublicKey = Buffer.from(publicKey);
      invalidPublicKey[i] = invalidPublicKey[i]+1;
      const result2 = verifier2.verify(invalidPublicKey, signature);
      if(result2) {
        bytes.push(i);
      };
    } catch (e) {
      // error to be handled
    }
  }
  if(bytes.length){
    console.log('****************');
    console.log(`key length: ${publicKey.length}`); // 451
    console.log('Bytes to be changed, and the verify would be valid');
    console.log(bytes.join(',')); // 49, 450
    console.log('****************');
  }

不同的公钥如何验证签名,我在这里遗漏了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-29 04:32:58

因此,如果您使用的是Unix上的OpenSSL rsa -pubout,那么显然您使用的是RSA-2048键盘中的rsa -pubout

  • 在偏移量49处的字符在偏移量16和17处编码部分字节(特别是偏移量16的底部4位和偏移量17的前2位)。它们是2字节NULL,表示AlgorithmIdentifier的X.509 SubjectPublicKeyInfo格式的参数部分。对于RSA,不存在算法参数(这就是编码使用NULL的原因),虽然这个字段仍然应该被解码,但nodejs并不需要这样做,因为知道它是不需要的,并且将被忽略。
  • PEM文件中偏移量450处的字符是终止页脚行的换行符。尽管格式定义是必需的,但是没有必要实际解析它来提取文件的内容,即公钥blob,也许nodejs没有。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52560322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档