簡體   English   中英

如何在沒有私鑰的情況下從 PEM 格式的 ECC 公鑰獲取 X 和 Y 組件?

[英]How can I get X and Y components from a ECC public key in PEM format without private key?

我知道我們可以使用 openssl 來做到這一點。 但是,這需要私鑰。 就我而言,我沒有私鑰,只有公鑰。 我使用 Google Cloud HSM,但無法直接訪問私鑰。 我只能下載公鑰。 那我該怎么做呢?

我的公鑰,它使用secp256r1

-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEhspCFgsa/oSDJajb8DvaLhLURUbD
C2UXU1E/a//ht4NMLTadhSMc195SL8YD55tPXR6bvERBrZfYEmpBlkr8BQ==
-----END PUBLIC KEY-----

是否需要 openssl 作為解決方案? 我看不到以這種方式獲取您要求的信息的方法。

我通過一個簡單的 Java 程序獲得了這些信息:

EC public key, 256 bits
  public x coord: 60967280926790184513158415212015267447322831299023265344568139622352475502467
  public y coord: 34455661551278605550386928620071510096611427884751984970963480406192147856389
  parameters: secp256r1 [NIST P-256, X9.62 prime256v1] (1.2.840.10045.3.1.7)

Java代碼:

    String keyAsTxt = "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEhspCFgsa/oSDJajb8DvaLhLURUbDC2UXU1E/a//ht4NMLTadhSMc195SL8YD55tPXR6bvERBrZfYEmpBlkr8BQ==";
    byte[] keyAsBytes = Base64.getDecoder().decode(keyAsTxt);
    X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyAsBytes);
    KeyFactory keyFactory = KeyFactory.getInstance("EC");
    PublicKey publicKey = keyFactory.generatePublic(keySpec);
    System.out.println(publicKey);

你可以使用:

openssl ec -pubin -noout -text -conv_form uncompressed

這將是 output:

Public-Key: (256 bit)
pub:
    04:86:ca:42:16:0b:1a:fe:84:83:25:a8:db:f0:3b:
    da:2e:12:d4:45:46:c3:0b:65:17:53:51:3f:6b:ff:
    e1:b7:83:4c:2d:36:9d:85:23:1c:d7:de:52:2f:c6:
    03:e7:9b:4f:5d:1e:9b:bc:44:41:ad:97:d8:12:6a:
    41:96:4a:fc:05
ASN1 OID: prime256v1
NIST CURVE: P-256

04表示它是未壓縮的(我們強制這樣做),X 和 Y 坐標只是相互連接:

X (hex): 86:ca:42:16:0b:1a:fe:84:83:25:a8:db:f0:3b:da:2e:12:d4:45:46:c3:0b:65:17:53:51:3f:6b:ff:e1:b7:83
Y (hex): 4c:2d:36:9d:85:23:1c:d7:de:52:2f:c6:03:e7:9b:4f:5d:1e:9b:bc:44:41:ad:97:d8:12:6a:41:96:4a:fc:05

可能的 bash 管道可能是(需要確保 openssl 文本 cli output 穩定):

| grep -E "^ +.*" | tr -d ' \n' | sed 's/^...//' | sed 's/./ /96'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM