Cryptography 给定PEM文档,是否可以从中了解字节的格式,或者是否需要先验信息?

Cryptography 给定PEM文档,是否可以从中了解字节的格式,或者是否需要先验信息?,cryptography,x509,asn.1,pem,pkcs#12,Cryptography,X509,Asn.1,Pem,Pkcs#12,给定PEM内部编码的任意(有效!)私钥或公钥,且预封装边界和后封装边界完好无损,是否可能确切知道字节采用的格式(即它们是OpenSSL传统、PKCS8、X.509SubjectPublicKeyInfo等),还是需要一些先验信息来正确地解码它们?对于证书,情况几乎很简单——边界线指定了预期的内容(证书或私钥) 在OpenPGP铠装数据中,边界线还告诉您所期望的内容-密钥或数据 几个SSH应用程序创建的SSH密钥具有相同的边界线,但密钥本身的格式不同。因此,您需要尝试读取所有预期格式的数据 RSA

给定PEM内部编码的任意(有效!)私钥或公钥,且
预封装边界
后封装边界
完好无损,是否可能确切知道字节采用的格式(即它们是OpenSSL传统、PKCS8、X.509
SubjectPublicKeyInfo
等),还是需要一些先验信息来正确地解码它们?

对于证书,情况几乎很简单——边界线指定了预期的内容(证书或私钥)

在OpenPGP铠装数据中,边界线还告诉您所期望的内容-密钥或数据

几个SSH应用程序创建的SSH密钥具有相同的边界线,但密钥本身的格式不同。因此,您需要尝试读取所有预期格式的数据

RSA公钥通常采用RSA 1.5格式,因此可以假定您拥有RSA密钥

PKCS#12通常不会打包到PEM(我从未见过这样的文件)。PKCS8也是如此

PKCS#7证书存储有时是PEM编码的,它们的边界线类似于BEGIN证书存储


总而言之,在某种程度上,你可以依赖边界线文本,但这并不能给你100%的保证

您应该看看规范,PKCS#8是在中指定的

当.p8文件采用PEM编码时,它们使用.PEM文件扩展名。 PEM编码是DER编码的Base64编码 EncryptedPrivateKeyInfo夹在:

-----开始加密私钥------
-----结束加密私钥-----

或DER编码的PrivateKeyInfo的Base64编码,见[RFC4648]第4节,夹在:

-----开始私钥------
-----结束私钥----


稍长一点的回答:“在任何情况下,标签之间都是有效的Base64编码的DER编码的ASN。1”

开始一些东西
边界是一个暗示,内容可能是一些东西,但它不具有约束力,这意味着PEM阅读器不应该基于边界标题假定特定内容,而应该仅使用边界,找出文档边界。