我得到了一个 RSA pubkey.dat(几乎很明显它是什么),其内容结构如下:

  • ASN1 大约 1024 位的整数(模数)
  • ASN1 整数(指数)
  • 256 字节的 Blob(签名)

没有像“----开始---”之类的标签。其中纯十六进制值。

有什么方法可以识别它的格式,例如 DER/PEM/etc ,这样我就可以使用 python 加密库或 c++ 上的 crypto++ 打开它?

(或者它是否与公共标准结构名称匹配供我检查)

看起来它不是 PEM,因为 M2crypt 无法加载它。

提前致谢。

有帮助吗?

解决方案

PEM 编码具有强制格式:

-----BEGIN typeName-----
base64 of DER value
-----END typeName-----

其中,对于公钥,typeName="PUBLIC KEY" (AFAIR),因此可以很容易地使用正则表达式进行检查,如下所示:

/-----BEGIN [^-]+-----([A-Za-z0-9+\/=\s]+)-----END [^-]+-----/

如果不是 PEM,则通常是纯 DER。

ASN.1 SEQUENCE 的 DER 表示始终以 0x30 开头,因此通常当我必须解码 DER-or-PEM 流时,我确信它是 ASN.1 SEQUENCE(无论如何,最复杂的值都是 SEQUENCE)我会检查第一个字节:如果它是 0x30,我解码为 DER,否则我解码为 PEM。

您可以使用以下命令快速检查您的 ASN.1 数据 我自己的开源 ASN.1 解析器 (这都是客户端 JavaScript,所以我不会看到你的数据)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top