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" 可能仍然是您想要的格式。