RSA 公钥文件类型检测
-
12-09-2019 - |
题
我得到了一个 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,所以我不会看到你的数据)。
不隶属于 StackOverflow