Openssl

將 EC 公鑰從 SubjectPublicKeyInfo 形式轉換為“傳統”形式

  • March 8, 2017

希望我的條款是正確的。

我目前有一個 EC 公鑰,格式為

-----BEGIN PUBLIC KEY-----
xxxxx
-----END PUBLIC KEY-----

我理解的是SubjectPublicKeyInfo表格。我想把它轉換成表格

-----BEGIN EC PUBLIC KEY-----
xxxxx
-----END EC PUBLIC KEY-----

使用類似openssl或類似的命令。我似乎找不到RSAPublicKey_{in|out}該命令的openssl ec命令。我希望能夠以DERPEM形式轉換公鑰。

有沒有其他方法可以做到這一點?

OpenSSL 不支持任何“BEGIN EC PUBLIC KEY”格式並且(AFAIK)不存在這種格式。RSA 有一個“傳統”的公鑰格式(“BEGIN RSA PUBLIC KEY”),它本質上是一個 PEM 編碼的 PKCS#1 結構。後來的標准定義瞭如何以與算法無關的方式(SubjectPublicKeyInfo)對公鑰進行編碼,因此並不總是存在“傳統”格式版本。

您可以通過查看 openssl pem 標頭檔 (include/openssl/pem.h) 來檢查已知的 OpenSSL PEM 類型。您會注意到沒有“EC PUBLIC KEY”條目。有一個“RSA PUBLIC KEY”、“DSA PUBLIC KEY”和“ECDSA PUBLIC KEY”,但後兩者在 OpenSSL 程式碼庫中的任何地方都沒有使用(即它們只存在於標頭檔中)。

私鑰有“傳統”格式。要將 PKCS8 私鑰轉換為傳統形式,請使用:

openssl ec -in p8file.pem -out tradfile.pem

ec 命令還可以辨識“-inform DER”和“-outform DER”選項。因此,例如,要將 DER PKCS8 私鑰文件轉換為 PEM 傳統格式,您可以使用:

openssl ec -inform DER -in p8file.der -out tradfile.pem

或者將 PEM PKCS8 私鑰文件轉換為 DER 傳統用途:

openssl ec -in p8file.pem -outform DER -out tradfile.der

您也可以採用另一種方​​式,即傳統形式的 PKCS8 私鑰:

openssl pkcs8 -topk8 -nocrypt -in tradfile.pem -out p8file.pem

上面的 pkcs8 命令也可以辨識 -inform 和 -outform 選項。

引用自:https://unix.stackexchange.com/questions/349636