无法在节点js中使用加密创建签名
unable to create signature using cryto in nodejs
我正在尝试使用 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");
问题是我遇到了这个错误。我搜索了整个互联网,但无法找到正确的解决方案。
internal/crypto/sig.js:105
const ret = this[kHandle].sign(data, format, type, passphrase, rsaPadding,
^
Error: error:0909006C:PEM routines:get_name:no start line
在发布的 NodeJS 代码中,密钥作为 object 传递,因此通常必须将属性 key
、format
和 type
用于密钥description,在sign.sign(privateKey[, outputEncoding])
and crypto.createPrivateKey(key)
.
的文档中有详细说明
特此key
包含keymaterial,format
指定编码('pem'
或'der'
,其中'pem'
为默认) 和 type
类型(对于 RSA,这可以是 'pkcs1'
或 'pkcs8'
,其中仅当 format
等于 'der'
时才需要此参数)。
如果这些属性不一致,一般会出错。
例如,在贴出的代码中,没有明确指定format
,所以使用默认的'pem'
。如果密钥 privateKey
是 DER 编码密钥(在缓冲区中),则存在导致错误消息 Error: error:0909006C:PEM routines:get_name:no start line:由于隐式指定 format
'pem'
,PEM 编码的密钥需要相应的 header,而 DER 编码的密钥缺少该密钥,从而导致错误。解决方法是显式指定format
和type
,例如:
{ 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 编码的密钥作为字符串或缓冲区。
我正在尝试使用 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");
问题是我遇到了这个错误。我搜索了整个互联网,但无法找到正确的解决方案。
internal/crypto/sig.js:105 const ret = this[kHandle].sign(data, format, type, passphrase, rsaPadding, ^
Error: error:0909006C:PEM routines:get_name:no start line
在发布的 NodeJS 代码中,密钥作为 object 传递,因此通常必须将属性 key
、format
和 type
用于密钥description,在sign.sign(privateKey[, outputEncoding])
and crypto.createPrivateKey(key)
.
特此key
包含keymaterial,format
指定编码('pem'
或'der'
,其中'pem'
为默认) 和 type
类型(对于 RSA,这可以是 'pkcs1'
或 'pkcs8'
,其中仅当 format
等于 'der'
时才需要此参数)。
如果这些属性不一致,一般会出错。
例如,在贴出的代码中,没有明确指定format
,所以使用默认的'pem'
。如果密钥 privateKey
是 DER 编码密钥(在缓冲区中),则存在导致错误消息 Error: error:0909006C:PEM routines:get_name:no start line:由于隐式指定 format
'pem'
,PEM 编码的密钥需要相应的 header,而 DER 编码的密钥缺少该密钥,从而导致错误。解决方法是显式指定format
和type
,例如:
{ 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 编码的密钥作为字符串或缓冲区。