![将EC公钥从SubjectPublicKeyInfo形式转换为“传统”形式](https://linux22.com/image/106957/%E5%B0%86EC%E5%85%AC%E9%92%A5%E4%BB%8ESubjectPublicKeyInfo%E5%BD%A2%E5%BC%8F%E8%BD%AC%E6%8D%A2%E4%B8%BA%E2%80%9C%E4%BC%A0%E7%BB%9F%E2%80%9D%E5%BD%A2%E5%BC%8F.png)
希望我的条款正确。
我目前有一个 EC 公钥,格式为
-----BEGIN PUBLIC KEY-----
xxxxx
-----END PUBLIC KEY-----
我理解的是SubjectPublicKeyInfo
形式。我想将其转换成以下形式
-----BEGIN EC PUBLIC KEY-----
xxxxx
-----END EC PUBLIC KEY-----
使用类似openssl
或相似的命令。我似乎找不到RSAPublicKey_{in|out}
该openssl ec
命令。我希望能够以DER
和PEM
形式转换公钥。
还有其他方法可以做到这一点吗?
答案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 选项。