1

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

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

然后我将publicKey使用下面的exportKey函数导出window.crypto.subtle

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

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

4

1 回答 1

1

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

Java 代码以 X.509/SPKI 格式导出一个公共 EC 密钥,该格式是 Base64 编码的。JavaScript 代码以未压缩格式导出公钥0x04|<x>|<y>。X.509/SPKI 格式的导出可以spki作为第一个参数 s。这里这里

于 2021-09-02T07:04:28.080 回答