DER 二进制 (.der)
ITU-T 标准Distinguished Encoding Rules (DER) 是 ASN.1 数据结构的严格且规范的二进制编码标准,为安全证书和密码密钥提供无歧义、按位精确的表示形式。
将 DER 转换为 PEM
免费的浏览器端 DER 转 PEM 转换器。在您的设备上即时转换文件。
检查与元数据
操作系统和文件分析器通过检查开头的二进制字节序列来识别 DER 文件:
字节级文件头签名 (Magic Bytes)
操作系统和文件分析器通过检查开头的二进制字节序列来识别 DER 文件:
十六进制签名 (偏移量 0):
30 82ASCII 表示形式: 0\x82
标准化: ITU-T Recommendation X.690
技术规格
| 容器架构 | Strict canonical binary encoding of ASN.1 structures using Tag-Length-Value (TLV) triples |
| 压缩方式 | Uncompressed binary data |
| 字节序 | Big-Endian ASN.1 encoding |
| 色彩空间 | N/A (Cryptographic Binary Stream) |
| 通道与结构 | Cryptographic keys, X.509 certificates, CRLs, and PKCS structures |
| 最大尺寸 | Unbounded ASN.1 length |
| 透明度 | Binary ASN.1 data structure |
| 流式传输与渐进式加载 | Deterministic single-pass canonical decoding |
技术对比矩阵:DER 对比同类产品
| 技术属性 | DER (当前) | PEM | CRT | P12 |
|---|---|---|---|---|
| 数据表示 | 严格的二进制 ASN.1 编码 | Base64 ASCII 铠甲文本 | Base64 PEM 或二进制 DER | 加密的二进制 PKCS #12 存档 |
| 确定性哈希 | 100% 规范位流 | 取决于空白/横幅 | 取决于格式 | 使用盐值/IV 加密 |
| 文件大小 | 最小(比 PEM 小约 33%) | 由于 Base64 而更大 (+33%) | 由于 Base64 而更大 (+33%) | 由于加密包装而更大 |
| Java 与硬件支持 | 原生标准 | 在 Java 中需要转换 | 在 Java 中需要转换 | 支持作为密钥库 |
常见损坏模式与十六进制恢复指南
OpenSSL 错误:'asn1 encoding routines:ASN1_get_object:header too long'。
根本原因: ASN.1 序列头中的标签-长度-值 (TLV) 字节损坏。
恢复方法: 使用 File2File 证书工具进行转码,以重建有效的 DER 规范字节。
安全分析与解析器攻击向量
DER 解码器会解析长度描述符,其中整数下溢/溢出可能会在原生密码库中触发缓冲区溢出。
已知攻击向量
- 在深度嵌套的 ASN.1 不定长解码期间发生整数溢出。
- 解析格式错误的位字符串时发生越界读取。
- 通过嵌套的 ASN.1 递归炸弹实施拒绝服务攻击。
防御性最佳实践:
历史渊源与里程碑
2021ITU-T X.690 修订版在现代硬件令牌中稳定了 ASN.1 DER 规范。
1997被 Java 加密体系结构 (JCA) 采用,用于二进制密钥编码 (X509EncodedKeySpec)。
1988作为基本编码规则 (BER) 的严格子集,在 CCITT / ITU-T 建议书 X.690 下标准化。
核心优势与特点
- 规范且确定:保证相同的数据始终产生完全相同的二进制哈希,这对于数字签名至关重要。
- 比 PEM 更紧凑:通过省略 Base64 编码和 ASCII 横幅,节省了约 33% 的开销。
- 硬件安全模块 (HSM)、智能卡和 Java 密钥库的原生格式。
技术局限与劣势
- 二进制格式无法在文本编辑器中查看、编辑或复制粘贴。
- 在网络托管环境中不太常见,因为网络环境绝大多数更喜欢基于文本的 PEM/CRT 文件。
- 严格的编码规则意味着任何微小的填充差异都会导致解析拒绝。
趣味技术冷知识
- DER 是 BER(基本编码规则)的严格子集;虽然 BER 允许多种有效方式来编码值,但 DER 仅允许一种规范方式。
- 如果对 DER 文件进行 Base64 编码并将其包装在"-----BEGIN CERTIFICATE-----"中,您将获得一个标准的 PEM 文件。
- Java 的 KeyFactory 要求以原始 DER 格式提供 RSA 公钥和私钥。
常见技术问题
DER 和 PEM 有什么区别?
DER 是证书或密钥的原始二进制格式。PEM 只是将相同的 DER 文件转换为可读的 Base64 文本,并带有 '-----BEGIN...-----' 标头。
如何将 DER 转换为 PEM?
将您的 .der 文件上传到 File2File.app,即可直接在浏览器中用一秒钟将其转换为标准的 .pem 文本证书。
为什么 Java 使用 DER 密钥?
Java 密码学架构 (JCA) 使用 DER 编码的 PKCS#8 和 X.509 字节数组作为其原生密钥规范。