我正在尝试遵循 subtleCrypto
的 Web 文档:
https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/encrypt
要使用 RSA-OAEP,请传递一个 RsaOaepParams 对象。
应该如何格式化 RSA
密钥?以下代码仅使用明文的 rsaPublicKey
和 rsaPrivateKey
:它们应该如何更改?
let rsaPublicKey = "ssh-rsa AAAAB3 ..."
function encrypt(rsaPublicKey, msg) {
let emsg = new TextEncoder().encode(msg)
let encrypted = crypto.subtle.encrypt(
{
name: "RSA-OAEP"
},
rsaPublicKey,
msg
);
return encrypted
}
let rsaPrivateKey = "MIIEvQIBADU ..."
function decrypt(rsaPrivateKey, encrypted) {
return window.crypto.subtle.decrypt(
{
name: "RSA-OAEP"
},
rsaPrivateKey,
encrypted
);
}
这里是尝试进行往返操作的(可能不正确的)代码:
let enc = encrypt(rsaKey, "hello world!") // ERROR on this line
console.log(enc)
let dec = decrypt(rsaPrivateKey, enc)
console.log(dec)
错误信息为:
未捕获的异常(在 Promise 中):TypeError:在“ SubtleCrypto”上执行“加密”失败:参数2不是“ CryptoKey”类型。
那么公钥和私钥应该以何种方式编码/格式化?
crypto.subtle.importKey
。预计密钥将以DER编码,即PEM编码密钥必须首先进行DER编码。但是,您使用的公钥似乎是以OpenSSH格式编码的,这是我所知道的不支持的格式,因此必须首先进行转换。 - Topaco