SubtleCrypto: "InvalidAccessError: The key is not of the expected type" when trying to export CryptoKeyPair.publicKey
SubtleCrypto: "InvalidAccessError: The key is not of the expected type" when trying to export CryptoKeyPair.publicKey
我正在尝试创建一个网络应用程序来生成 RSA public/private 密钥对,并且我正在测试我的代码。
(async function() {
const subtle = crypto.subtle;
const keyConfig = {
name: "RSA-OAEP",
modulusLength: 2048,
publicExponent: new Uint8Array([1,0,1]),
hash: "SHA-256"
}
const key = await subtle.generateKey(keyConfig, true, ["encrypt", "decrypt"]);
const public = key.publicKey;
const private = key.privateKey;
const exported_public = subtle.exportKey("pkcs8", public)
.then(arr => {
alert(arr) // I know it's an ArrayBuffer
})
.catch(err => {
alert(err)
});
})();
在这种情况下,.catch 语句警告错误“InvalidAccessError:密钥不是预期的类型”。我进行了快速 google 搜索,但没有找到任何结果。我该如何解决这个问题?
您不能将 public 密钥导出为 "pkcs8"
,因为 PKCS#8 - the " Private-Key Information Syntax Specification" 用于明文或 - 有时 - 加密私钥。
对于 public 键,您将使用 "spki"
,它是 SubjectPublicKeyInfo
as defined in the X509v3 certificate specifications 的缩写。它是类似于(未加密的)PKCS#8 的结构。两者都包含密钥类型(使用 OID),当然还有密钥值。
请注意,某些库可能会错误地允许您执行此类编码/解码。可能它们仍会转换为/从 SubjectPublicKeyInfo
,因此 "spki"
可能仍然是您想要的格式。
我正在尝试创建一个网络应用程序来生成 RSA public/private 密钥对,并且我正在测试我的代码。
(async function() {
const subtle = crypto.subtle;
const keyConfig = {
name: "RSA-OAEP",
modulusLength: 2048,
publicExponent: new Uint8Array([1,0,1]),
hash: "SHA-256"
}
const key = await subtle.generateKey(keyConfig, true, ["encrypt", "decrypt"]);
const public = key.publicKey;
const private = key.privateKey;
const exported_public = subtle.exportKey("pkcs8", public)
.then(arr => {
alert(arr) // I know it's an ArrayBuffer
})
.catch(err => {
alert(err)
});
})();
在这种情况下,.catch 语句警告错误“InvalidAccessError:密钥不是预期的类型”。我进行了快速 google 搜索,但没有找到任何结果。我该如何解决这个问题?
您不能将 public 密钥导出为 "pkcs8"
,因为 PKCS#8 - the " Private-Key Information Syntax Specification" 用于明文或 - 有时 - 加密私钥。
对于 public 键,您将使用 "spki"
,它是 SubjectPublicKeyInfo
as defined in the X509v3 certificate specifications 的缩写。它是类似于(未加密的)PKCS#8 的结构。两者都包含密钥类型(使用 OID),当然还有密钥值。
请注意,某些库可能会错误地允许您执行此类编码/解码。可能它们仍会转换为/从 SubjectPublicKeyInfo
,因此 "spki"
可能仍然是您想要的格式。