现在,我正在通过简单的测试来测试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)
。