如何在Delphi中将JSON Web Key转换为PEM格式?

问题描述 投票:0回答:2

之前我发现在使用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 中是否可以进行相同的转换?

encryption pem delphi-10.2-tokyo jwk
2个回答
3
投票

您将在低级 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

中找到一些计算ECC prime256v1的纯pascal代码。


0
投票
这里

简化示例:

ecdsa_sign_osl()

© www.soinside.com 2019 - 2024. All rights reserved.