Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将Web加密密钥导出到jsrsasign_Javascript_Cryptography_Rsa_Pkcs#8_Webcrypto Api - Fatal编程技术网

Javascript 如何将Web加密密钥导出到jsrsasign

Javascript 如何将Web加密密钥导出到jsrsasign,javascript,cryptography,rsa,pkcs#8,webcrypto-api,Javascript,Cryptography,Rsa,Pkcs#8,Webcrypto Api,我尝试使用生成RSA密钥,并使用它对字符串进行签名()。因此,我导出Web加密密钥并将其转换为PKCS8-PEM,但当我调用KEYUTIL.getKeyFromPlainPrivatePKCS8PEM将密钥导入JSR签名时,会抛出一个错误:格式错误的普通PKCS8私钥(代码:001) 我做错了什么 我更喜欢这个解决方案,但我仍然想知道为什么我的pkcs8解决方案不起作用。由于“RSA”部分,您的PEM编码密钥实际上是PKCS#1而不是PKCS#8。这只是DER中的RSA密钥对象,没有将密钥标识符

我尝试使用生成RSA密钥,并使用它对字符串进行签名()。因此,我导出Web加密密钥并将其转换为PKCS8-PEM,但当我调用
KEYUTIL.getKeyFromPlainPrivatePKCS8PEM
将密钥导入JSR签名时,会抛出一个错误:格式错误的普通PKCS8私钥(代码:001)

我做错了什么


我更喜欢这个解决方案,但我仍然想知道为什么我的pkcs8解决方案不起作用。

由于“RSA”部分,您的PEM编码密钥实际上是PKCS#1而不是PKCS#8。这只是DER中的RSA密钥对象,没有将密钥标识符包装在序列中


jsrsasign正在寻找PKCS#8头“BEGIN PRIVATE KEY”而不是“BEGIN RSA PRIVATE KEY”。更改标头可以使其工作。

由于“RSA”部分的原因,您的PEM编码密钥实际上是PKCS#1而不是PKCS#8。这只是DER中的RSA密钥对象,没有将密钥标识符包装在序列中


jsrsasign正在寻找PKCS#8头“BEGIN PRIVATE KEY”而不是“BEGIN RSA PRIVATE KEY”。更改头使其工作。

将PEM头从
“----开始RSA私钥------
更改为
”----开始私钥------
将不起作用,因为内容不同。我认为使用JWK导出文件是最好的方法,因为它在任何浏览器之间都有很多互操作性。我以前也尝试过同样的方法,但是PKCS#8在某些浏览器上不起作用

如Felix所述,您的RSA密钥是一个PKCS#1密钥,它具有
“----开始RSA私钥------”
PEM

如果需要将PKCS#1转换为PKCS#8keyKEYUTIL类可能很有用,如下示例所示:

keyobj = KEYUTIL.getKey("-----BEGIN RSA PRIVATE KEY-----..."); // your key
pkcs8pem = KEYUTIL.getPEM(keyobj, "PKCS8PRV");

由于内容不同,将PEM头从
“----开始RSA私钥------
更改为
”----开始私钥------
,将不起作用。我认为使用JWK导出文件是最好的方法,因为它在任何浏览器之间都有很多互操作性。我以前也尝试过同样的方法,但是PKCS#8在某些浏览器上不起作用

如Felix所述,您的RSA密钥是一个PKCS#1密钥,它具有
“----开始RSA私钥------”
PEM

如果需要将PKCS#1转换为PKCS#8keyKEYUTIL类可能很有用,如下示例所示:

keyobj = KEYUTIL.getKey("-----BEGIN RSA PRIVATE KEY-----..."); // your key
pkcs8pem = KEYUTIL.getPEM(keyobj, "PKCS8PRV");
keyobj = KEYUTIL.getKey("-----BEGIN RSA PRIVATE KEY-----..."); // your key
pkcs8pem = KEYUTIL.getPEM(keyobj, "PKCS8PRV");