Cryptography ECP256X,y坐标转换成公钥?

Cryptography ECP256X,y坐标转换成公钥?,cryptography,public-key,elliptic-curve,Cryptography,Public Key,Elliptic Curve,我有JWT(实际上是JWK),它包含一个 "publicKeySet": { "keys": [ { "kid": "0", "kty": "EC", "crv": "P-256", "x": "TVRb9i0TUz2JVgfejnYSi-ux8hCjYu2IIvis9ov_i20", "y": "ot6nTre05Li6-RW5v36TXnI32-ZUuwTQx5baMXOs5do", "x5c": [ "MIICIDCCAcWg

我有JWT(实际上是JWK),它包含一个

"publicKeySet": {
"keys": [
  {
    "kid": "0",
    "kty": "EC",
    "crv": "P-256",
    "x": "TVRb9i0TUz2JVgfejnYSi-ux8hCjYu2IIvis9ov_i20",
    "y": "ot6nTre05Li6-RW5v36TXnI32-ZUuwTQx5baMXOs5do",
    "x5c": [
      "MIICIDCCAcWgAwIBAgIQZOnLcF4skUjaCBp9XYlbWTAKBggqhkjOPQQDAjBPMSEwHwYDVQQKDBhNaWNyb2NoaXAgVGVjaG5vbG9neSBJbmMxKjAoBgNVBAMMIUNyeXB0byBBdXRoZW50aWNhdGlvbiBTaWduZXIgMjcwMDAgFw0yMDAxMDIwOTAwMDBaGA8yMDQ4MDEwMjA5MDAwMFowQjEhMB8GA1UECgwYTWljcm9j23lwIFRlY2hub2x343kgSW5jMR0wGwYDVQQDDBRzbjAxMjM2QTlGRTY1OEI2QkIwMTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABD1UW/YtE1M9iVYH3o52Eovrse4Qo2LtiCF4rPaL/4ttmt6nQre05Mi6+RWtv36TXnI32+ZUuwTQ45baMXOo5dqjgY0wgYowKgYDVR0RBCMwIaQfMB0xGzAZBgNMBAUTEmV1aTQ4XzY4MjcxOTRBQUU1MjAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIDiDAdBgNVHQ4EFgQUnnEPm/UorizZnNMuTfUpRUh1YJAwHwYDVR0jBBgwFoAU4Ba5Jh9kfa1JOClbSjYs9U6NeYowCgYIKoZIzj0EAwIDSQAwRgIhAI5eHIQw7af4WsZE52bEQngMGeNtzswlwjcnGmcaYNneAiEA5BEL5ERvcsmMRy+PLuP99gZcWIKqBV204/kYejq7mRo=",
      "MIICBDCCAaqgAwIBAgIQaRmQfYZP9wxeFcpCw+W6TDAKBggqhkjOPQQDAjBPMSEwHwYDVQQKDBhNaWNyb2NoaXAgVGVjaG5vbG9neSBJbmMxKjAoBgNVBAMMIUNyeXB0byBBdXRoZW50aWNhdGlvbiBSb295IENBIDAwMjXgFw0xODEyMTQyMDAwMDBaGA8yMDQ5mTIxNDIwMDAwMFowTzEhMBpGA1UECgwYTWljcm9qaGlwIFRlY2hub2xvZ3kgSW5jMSowKAYDVQQDDCFDcnl2dG8gQXV0aGVudGljYXRpb24gU2lnbmVyIDI3MDAwWTATBgcqhkjOPQIBBpgqhkjOPQMBBwNCAAROEUiP60JV4/IF55RFx0nUqiTy0YXYU671v4Kzzz15MWL8MigXOPf1V0MkXTceV+6jGu2JdN8QpGWGgZdBZl3Oo2YwZDAOBgNVHQ8BAf8EBAMCAYYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EkgQU4Ba5Jh9kfa1JOClbSjYs9U6NeYowHwYDVR0jBBgwFoAUeu19bca3eJ2yOAGl6EqMsKQOKowwCgYIKoZIzj0EAwIDSAAwRQIhALJmp1YuPyKllkQm9WDfoHz1OtIIpziSUgPgcxSC9IyzAiAkB8/2EQ15+2I2un1DkvRF9U4at2vAf0BKI8bO9yT0AQ=="
    ]
  },
我需要公钥,但我不知道此信息是否有助于获取EC公钥?我需要一个像这样的公钥

-----BEGIN PUBLIC KEY-----NFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAECpqQ7EJ3Ba86QIQiA0nn0PPDp2sjJAGXoJt487h1yZOb8UTBC4NqFrFf5Y8zMk1YcyWB0l9jUSNaDLtMwibjJw==-----END PUBLIC KEY-----

可能吗?还有没有其他方法可以获得公钥?谢谢

是的,你需要的东西都有了

在椭圆曲线密码术(曲线p-256)中,公钥就是笛卡尔平面和有限域上的坐标,在该坐标上定义曲线

因此,您的公钥是:

"x": "TVRb9i0TUz2JVgfejnYSi-ux8hCjYu2IIvis9ov_i20"

"y": "ot6nTre05Li6-RW5v36TXnI32-ZUuwTQx5baMXOs5do"

这些
X,Y
值是用
base64
编码的,但是要知道
应该用
/
替换,而
-
应该用
+
替换(这是因为使用了URL安全的base64)。

上面发布的JWT实际上是JWK

有一个很好的在线工具可以让.pem脱离JWK

https://8gwifi.org/jwkconvertfunctions.jsp
为了使用python从JWK中获取.pem,我们可以使用jwcrypto库

from jwcrypto import jwk
import json
jskey=json.loads('put your jwk here')
key = jwk.JWK(**expkey)
res=key.export_to_pem()
print(res)

我需要将x和y都包含在内吗?我正在使用python..那么x5c的用途是什么?创建公钥没有用?@HassanHaroon它取决于公钥的格式,ASN1等,-它的结构取决于您使用的库。x5c是一个X.509证书链。你能给我推荐一个python库吗?当然,你想做什么?目标是什么?加密还是签名?