End2End 加密 IOException: algid 解析错误,不是序列

End2End encryption IOException: algid parse error, not a sequence

我正在使用本机浏览器加密 API 生成 Public 和私钥,如下所示:

export const generateKeyPair = async (): Promise<CryptoKeyPair> => {
    return await window.crypto.subtle.generateKey(
        {
            name: "ECDH",
            namedCurve: "P-384",
        },
        true,
        ["deriveKey", "deriveBits"],
    );
};

然后我将使用 window.crypto.subtle 下的 exportKey 函数导出 publicKey,如下所示:

const keyPair: CryptoKeyPair = yield generateKeyPair();
const publicKeyArrayBuffer: ArrayBuffer = yield window.crypto.subtle.exportKey("raw", keyPair.publicKey);
const publicKeyAsBase64 = arrayBufferToBase64(publicKeyArrayBuffer);

如果您有任何建议,请告诉我并帮助我解决此问题。

两个代码使用不同的曲线,Java 代码 secp256r1(又名 P-256),Java脚本代码 P-384。为了使这两种代码兼容,Java脚本代码必须应用与 Java 代码相同的曲线,即 P-256(s. 也 here)。

Java 代码以 X.509/SPKI 格式导出 public EC 密钥,该格式采用 Base64 编码。 Java脚本代码以未压缩格式 0x04|<x>|<y> 导出 public 密钥。使用 spki 作为第一个参数 s 可以导出 X.509/SPKI 格式。 here and here.