我使用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);
如果您有任何建议,请让我知道,并帮助我解决这个问题。
1条答案
按热度按时间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格式。这里和这里。