DER编码

1. DER编码解析

DER(Distinguished Encoding Rules)编码是ASN.1数据结构在ASN.1 DER标准下打包的二进制编码的格式规范。它是应用广泛的ASN.1编码之一。ASN.1是应用领域很广泛的一种数据表示和编码方式。ASN.1是Abstract Syntax Notation One(抽象语法标记语言第一版)的缩写。ASN.1是DSL领域的经典代表,业内有“数据的XML”之美誉。ASN.1可以只用于规范数据结构,而DER编码则是规范实际存储和传输数据的方式。

ASN.1规范的编码方式非常灵活,几乎可以描述任何数据类型。DER编码则是ASN.1进行编码时的一种约束,它规定了ASN.1数据结构如何序列化为二进制数据,使得数据能够在不同的计算机及不同语言之间互通。

2. DER编码的数字证书扩展名

数字证书是一个数字形式的身份证明文件,用于验证文件的真实性和所有权。数字证书的扩展名包括.crt、.cer、.p7c等。而DER编码的数字证书的扩展名通常是 .cer

与 DER 编码有关的数字证书解码器能够自动识别DER编码格式,为了使证书能够转换为其它类型,使用DER编码是一个不错的选择。

3. DER编码证书

数码证书通常存储在X.509证书中。X.509证书使用 ASN.1 DER 编码格式,可以通过各种语言和工具进行解析和生成。在编码证书之前,我们通常使用私钥生成一对密钥,其中一个作为公共密钥被添加到证书中。

// 生成证书
openssl req -new -x509 -out my_cert.crt -keyout my_key.key -days 365

// 查看证书内容
openssl x509 -text -noout -in my_cert.crt

4. DER编码格式

DER编码格式的编码规则简洁明了,它是基于ASN.1编码规范的。ASN.1定义了表示结构数据,编码,解码和传输的标准类型和格式。由于DER是固定格式,因此在传输或存储数据时不必存储ASN.1结构信息,这将节省传输空间。

4.1 DER的组成

无论什么类型它的DER编码都是有四部分组成:

字段说明
tag类型字段
length长度字段
value值字段
end结束表示字段

即T L V 三元组。

4.2 [Tag]类型字段

由一个字节(即八个二进制位)组成。
bit8 bit7用来表示tag类型,universal是00 application是01 context-specific是10 private是11
bit6表示结构化位,0代表简单类型,1代表结构类型
bit5-bit1表示tag值,tag值可以查表获得。

4.3 [Length]长度字段(单位:字节)

长度字段分为两种:小于等于127和大于127
小于等于127:用一个字节表示。bit8=0,bit7-bit1表示长度值。
例子:38表示为00100110

大于127:由多个字节组成
第一个字节:bit8=1,bit7-bit1表示存放长度所占字节数(通俗的讲就是后面还有几个字节)
其余字节:存放长度值
例如:201表示为10000001 11001001

长度值不定:用0x80表示。

4.4 [Value]值字段

不同的类型其值不同,但归根结底类型都是二进制,或十进制,或十六进制 ,或者是ASCLL字符,将他们转换为16进制表示出来即可。

结束标识字段(不在TLV之中):
两个字节,只有在长度值不定时才会出现。表示为0x000x00

5. DER编码 PEM编码

PEM(PKCS#1、PKCS#8)格式定义了DER编码后的ASN.1类型数据和其他杂项,如加密算法、签名算法等如何编码。PEM格式本质上是ASN.1类型数据在文本形式下的表示,因此它通常将DER编码后的ASN.1类型数据转换为BASE64编码的文本文件。

// 将 DER 编码的证书转换为 PEM 格式
openssl x509 -inform der -in my_cert.crt -out my_cert.pem

6. DER编码的证书扩展名

DER 编码的数字证书的扩展名通常是 .cer。该类型证书采用DER编码规范,并通常包含相应的公共密钥。除此之外,DER编码也可以用于其他格式的证书,例如X.509 SSL 证书和 PGP 证书。

7. DER编码的数字证书扩展名

数字证书的扩展名取决于证书格式。除了 .cer 之外,某些数字证书的扩展名还包括 .pem、.crt、.pfx、.p12等。

8. DER编码的格式如何实现

在Java中, DER 编码通常用于与数字证书和密钥存储器进行交互,例如 Keystore、Truststore、PKCS12等。

要实现DER编码的格式,需要使用Java Security API中的一些类,如X.509证书和ASN.1 DER编码的SubjectPublicKeyInfo结构。

// 获取DER编码的公钥
public static byte[] getDEREncodedPublicKey(PublicKey publicKey) throws IOException
{
    X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(publicKey.getEncoded());
    ASN1Object asn1Object = ASN1Sequence.getInstance(x509EncodedKeySpec.getEncoded());
    SubjectPublicKeyInfo subjectPublicKeyInfo = SubjectPublicKeyInfo.getInstance(asn1Object);
    return subjectPublicKeyInfo.getEncoded();
}

9. DER证书

DER编码形式可以用于存储和传输多种类型的证书,包括 TLS 证书、数字签名证书和代码签名证书等。DER证书可以用于实现安全通信、身份验证和代码签名,并已广泛应用于各种各样的互联网应用中。

下面是一个使用Java代码进行DER证书解析的例子:

// Load DER certificate
CertificateFactory cf = CertificateFactory.getInstance("X.509");
InputStream certificateIs = new FileInputStream("my_cert.cer");
X509Certificate cert = (X509Certificate) cf.generateCertificate(certificateIs);

// Extract information
System.out.println("Subject: " + cert.getSubjectDN());
System.out.println("Issuer: " + cert.getIssuerDN());
System.out.println("Serial number: " + cert.getSerialNumber());
System.out.println("Public key: " + cert.getPublicKey());
System.out.println("Validity period: " + cert.getNotBefore() + " - " + cert.getNotAfter());
System.out.println("Signature algorithm: " + cert.getSigAlgName());

10. 小结

以上就是关于 DER 编码的详细阐述。通过本文,我们了解到Der编码是ASN.1数据结构在ASN.1DER标准下打包的二进制编码的格式规范。ASN.1规范的编码方式非常灵活,几乎可以描述任何数据类型。在实际应用中,DER编码的格式被应用于各种数字证书和密钥管理器中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洒家肉山大魔王

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值