之前我发现在使用JWT Library中的签名之前,我需要将JSON Web Key(JWK)转换为PEM格式。
JWK格式的原始私钥:
{
"kty": "EC",
"d": "Rwyv99W3GnfjYbI0X-b5Umhvh88oRCKQkPxiwCPVGgg",
"crv": "P-256",
"x": "sDbcYT8HzBk1tUl849ZHrhpIn8ZV7HfD1DwYdsP1ip0",
"y": "EWodfKWQ6oE0ppyi7tRO_61BgAQsZyDjDGj9kLZiUts"
}
需要获取 PEM 格式,如下所示:
-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIEcMr/fVtxp342GyNF/m+VJob4fPKEQikJD8YsAj1RoIoAoGCCqGSM49
AwEHoUQDQgAEsDbcYT8HzBk1tUl849ZHrhpIn8ZV7HfD1DwYdsP1ip0Rah18pZDq
gTSmnKLu1E7/rUGABCxnIOMMaP2QtmJS2w==
-----END EC PRIVATE KEY-----
有一个在线转换器可以满足我的需要。 Delphi 中是否可以进行相同的转换?
您将在低级 OpenSSL 中拥有所需的一切。
它的 API 有点神秘,但你有 EC_POINT*() 函数来完成它。
检查我们做了什么 mormot.crypt.openssl 使用低级 ECC 私钥并将其与 OpenSSL 集成:
ecdsa_sign_osl
,它采用原始私钥并将其转换为 OpenSSL PEC_KEY
;OpenSslSaveKeys
将此密钥保存为 PEM。您只需导出
"d": "Rwyv99W3GnfjYbI0X-b5Umhvh88oRCKQkPxiwCPVGgg"
参数。它似乎与 TEccPrivateKey
中用作输入参数的布局相同。您还可以在mormot.crypt.ecc256r1.pas