【问题标题】:unable to create signature using cryto in nodejs无法在节点 js 中使用加密创建签名
【发布时间】:2020-12-24 09:03:33
【问题描述】:

我正在尝试使用 RSA-SHA25 算法创建签名。这是下面的代码

const data = "My data";    
const sign = crypto.createSign("RSA-SHA256");
sign.update(Buffer.from(data, "utf8"));
signature = sign
  .sign({ key: privateKey, padding: crypto.constants.RSA_PKCS1_PSS_PADDING })
  .toString("base64");

问题是我收到此错误。我搜索了整个互联网,但找不到正确的解决方案。

内部/crypto/sig.js:105 const ret = this[kHandle].sign(数据,格式,类型,密码,rsaPadding, ^

错误:错误:0909006C:PEM 例程:get_name:no start line

【问题讨论】:

    标签: javascript node.js rsa sha256


    【解决方案1】:

    在贴出的 NodeJS 代码中,key 是作为对象传递的,所以一般情况下,keyformattype 属性必须用于 key 描述,这在 @ 的文档中有详细说明987654321@和crypto.createPrivateKey(key)

    key 包含密钥材料,format 指定编码('pem''der',其中'pem' 是默认值)和type 类型(对于RSA,这可以是'pkcs1''pkcs8',其中仅当format 等于'der' 时才需要此参数。

    如果这些属性不一致,一般会报错。

    例如,在发布代码的情况下,format 没有明确指定,因此使用默认的'pem'。如果密钥 privateKey 是 DER 编码的密钥(在缓冲区中),则存在不一致导致错误消息 Error: error:0909006C:PEMroutines:get_name:no start line:因为在隐式指定的format'pem' 中,PEM 编码的密钥应具有相应的标头,而 DER 编码的密钥缺少该标头,从而导致错误。解决方法是明确指定formattype,例如:

    { key: privateKey, format: 'der', type: 'pkcs8', padding: crypto.constants.RSA_PKCS1_PSS_PADDING }
    

    对于 PKCS#8 密钥(或 'pkcs1' 对于 PKCS#1 密钥)。

    相反,对于

    { key: privateKey, padding: crypto.constants.RSA_PKCS1_PSS_PADDING }
    

    privateKey 必须是 PEM 编码的密钥,作为字符串或缓冲区。

    【讨论】:

      猜你喜欢
      • 2018-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多