【发布时间】:2020-07-17 06:44:09
【问题描述】:
我正在尝试关注subtleCrypto 的网络文档:
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)
错误是:
未捕获(承诺中)类型错误:无法在“SubtleCrypto”上执行“加密”:参数 2 不是“CryptoKey”类型。
那么应该如何对公钥(和私钥)进行编码/格式化?
【问题讨论】:
-
不只是你 OP,这些文档非常糟糕。不过,我正在尝试提供答案,我相信您会得到帮助。
-
密钥可以以不同的格式导入,私有的通常是 PKCS#8 格式,公共的通常是 spki 格式。为此必须使用的方法是
crypto.subtle.importKey。密钥应该是 DER 编码的,即 PEM 编码的密钥必须首先进行 DER 编码。但是,您使用的公钥似乎是 OpenSSH 格式,据我所知不支持,因此必须先进行转换。 -
@Topaco 请回答一下
-
@MaartenBodewes 这不是乞求:这是一个因提供有用信息而获得认可的机会。
标签: javascript encryption