栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 面试经验 > 面试问答

无法使用Node.js crypto对文件签名

面试问答 更新时间:发布时间: 百科书网 趣学号

用于签署数据的密钥必须是有效的PEM编码的私钥。DH

getPrivateKey()
函数不以这种格式返回密钥,而是返回裸机专用密钥数据。

您的选择包括:

  • 通过OpenSSL密钥生成器实用程序或类似工具生成私钥
  • 使用第三方节点模块正确编码私钥,如RFC 5915中所述。使用
    asn1.js
    bn.js
    模块的完整示例:
        var crypto = require('crypto');    var asn1 = require('asn1.js');    var BN = require('bn.js');    function toOIDArray(oid) {      return oid.split('.').map(function(s) {        return parseInt(s, 10)      });    }    // Define ECPrivateKey from RFC 5915    var ECPrivateKey = asn1.define('ECPrivateKey', function() {      this.seq().obj(        this.key('version').int(),        this.key('privateKey').octstr(),        this.key('parameters').explicit(0).objid().optional(),        this.key('publicKey').explicit(1).bitstr().optional()      );    });    // Generate the DH keys    var ecdh = crypto.createECDH('brainpoolP512t1');    ecdh.generateKeys();    // Generate the PEM-enpred private key    var pemKey = ECPrivateKey.enpre({      version: new BN(1),      privateKey: ecdh.getPrivateKey(),      // OID for brainpoolP512t1      parameters: toOIDArray('1.3.36.3.3.2.8.1.1.14')    }, 'pem', { label: 'EC PRIVATE KEY' });    // Sign data    var sign = crypto.createSign('sha512');    sign.update('hello world');    var signature = sign.sign(pemKey, 'hex');    console.log('signature', signature);


转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/418013.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号