现在,我正在通过简单的测试来测试Web Crypto API。因此,我拥有用户的公钥(作为字符串),并且我想让他传递其私钥(也作为字符串),因此我的应用程序可以进行一些加密/解密。因此,我尝试通过以下操作将其密钥导入Web Crypto API:

var textEncoder = new TextEncoder();
var alg = {
    name: "RSA-OAEP",
    hash: {name: "SHA-256"}
}
window.crypto.subtle.importKey('raw', textEncoder.encode(myPublicKey), alg, false, ['encrypt'])


密钥由生成

openssl genrsa -out mykey.pem 4096
openssl rsa -in mykey.pem -pubout > mykey.pub


WCAPI抛出

Unsupported import key format for algorithm


我在Alg中尝试了其他哈希,但仍然没有成功。

一个例子的帮助会很好。

最佳答案

您有一些错误:


raw更改为spki(由James K Polk指出)
TextEncoder.encode()不适合二进制密钥。见TextEncoder


  返回一个包含utf-8编码文本的Uint8Array。

将OpenSSL生成的PEM密钥转换为二进制ArrayBuffer。从此处https://stackoverflow.com/a/34995761/6371459使用convertPemToBinary(pemKey)

10-07 16:10