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

cwtwac6a  于 2023-06-20  发布在  Java
关注(0)|答案(1)|浏览(151)

我使用Native Browser crypto API生成公钥和私钥,如下所示:

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);

如果您有任何建议,请让我知道,并帮助我解决这个问题。

xjreopfe

xjreopfe1#

这两个代码使用不同的曲线,Java代码secp 256 r1(又名P-256),JavaScript代码P-384。为了使这两种代码兼容,JavaScript代码必须应用与Java代码相同的曲线,即P-256(也在这里)。
Java代码以X.509/SPKI格式导出一个公共EC密钥,该密钥是Base64编码的。JavaScript代码以未压缩格式0x04|<x>|<y>导出公钥。可以使用spki作为第一个参数s导出X.509/SPKI格式。这里和这里。

相关问题