cryptography - 给定一个 PEM 文档,是否有可能从中知道字节的格式,或者是否需要先验信息?

标签 cryptography x509 asn.1 pem pkcs#12

给定一个在 PEM 内编码的任意(有效!)私钥或公钥,带有 pre-encapsulation boundarypost-encapsulation boundaries完好无损,是否有可能确切知道字节采用什么格式(即它们是传统的 OpenSSL、PKCS8、X.509 SubjectPublicKeyInfo 等),还是需要一些先验信息来正确解码它们?

最佳答案

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

在 OpenPGP 装甲数据中,边界线还会告诉您预期的内容 - key 或数据。

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

RSA 公钥通常采用 RSA 1.5 格式,因此您可以假设您有一个 RSA key 。

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

PKCS#7 证书存储有时是 PEM 编码的,并且它们的边界线中有类似 BEGIN CERTIFICATE STORAGE 的内容。

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

关于cryptography - 给定一个 PEM 文档,是否有可能从中知道字节的格式,或者是否需要先验信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24742994/

相关文章:

c - 使用 openssl api 以编程方式将 x509 证书转换为人类可读的格式

asn.1 - 解析 EMV 事务中 GET PROCESSING OPTIONS 命令的 PDOL

c++ - 如何使用 asn1c 生成的代码解码 MAP 调用消息

java - 创建和验证签名数据时出错

C# x509 证书解码器

go - crypto/tls软件包中的自定义VerifyPeerCertificate

php - 在 PHP 中如何获取 CSR 的公钥?

java - 使用 BouncyCaSTLe 从 DER 文件解析 AttributeCertificate 时遇到未知标签

java - AES PBE 在 Java 中加密/在 Ruby 中解密

flutter - 如何将 sha256 的摘要添加到 flutter 中的字符串?