将EC公钥从SubjectPublicKeyInfo形式转换为“传统”形式

将EC公钥从SubjectPublicKeyInfo形式转换为“传统”形式

希望我的条款正确。

我目前有一个 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形式转换公钥。

还有其他方法可以做到这一点吗?

答案1

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 选项。

相关内容