如何将PEM公钥转回与原DER同ASN.1结构的DER格式?
解决方法:将X.509格式公钥转回PKCS#1格式DER
你遇到的是RSA公钥两种常见ASN.1格式的差异问题:
- 原DER是PKCS#1格式(
RSAPublicKey类型),结构直接是包含模数n和指数e的SEQUENCE - 转换后得到的PEM/转回的DER是X.509 SubjectPublicKeyInfo格式,外层SEQUENCE包含算法标识,内层才是PKCS#1格式的公钥内容
要转回原格式的DER,只需在OpenSSL命令中加上-RSAPublicKey_out参数,指定输出PKCS#1格式:
openssl rsa -pubin -in mypubkey -inform PEM -outform DER -RSAPublicKey_out -out originalFormatDerKey
执行完后,用asn1parse查看originalFormatDerKey,结构会和你最初的DER完全一致:
0:d=0 h1=4 l= 265 cons: SEQUENCE 4:d=1 h1=4 l= 256 prim: INTEGER: [你的模数内容] 264:d=1 h1=2 l= 3 prim: INTEGER [你的指数内容]
如果是编程实现,核心逻辑是:先解析X.509格式的公钥,提取出其中的RSAPublicKey部分,再将其序列化为DER格式即可(不同语言的OpenSSL绑定库都提供对应的API,比如C语言中的d2i_RSAPublicKey/i2d_RSAPublicKey,Python的cryptography库中可以通过public_key.public_bytes()指定Encoding.DER和PublicKeyFormat.PKCS1)。
内容的提问来源于stack exchange,提问作者stix359
相关产品推荐
相关产品推荐

