• 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 编码格式,可以通过各种语言和工具进行解析和生成。在编码证书之前,我们通常使用私钥生成一对密钥,其中一个作为公共密钥被添加到证书中。

    1. // 生成证书
    2. openssl req -new -x509 -out my_cert.crt -keyout my_key.key -days 365
    3. // 查看证书内容
    4. 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编码的文本文件。

    1. // 将 DER 编码的证书转换为 PEM 格式
    2. 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结构。

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

    9. DER证书

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

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

    1. // Load DER certificate
    2. CertificateFactory cf = CertificateFactory.getInstance("X.509");
    3. InputStream certificateIs = new FileInputStream("my_cert.cer");
    4. X509Certificate cert = (X509Certificate) cf.generateCertificate(certificateIs);
    5. // Extract information
    6. System.out.println("Subject: " + cert.getSubjectDN());
    7. System.out.println("Issuer: " + cert.getIssuerDN());
    8. System.out.println("Serial number: " + cert.getSerialNumber());
    9. System.out.println("Public key: " + cert.getPublicKey());
    10. System.out.println("Validity period: " + cert.getNotBefore() + " - " + cert.getNotAfter());
    11. System.out.println("Signature algorithm: " + cert.getSigAlgName());

    10. 小结

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

  • 相关阅读:
    计算机毕业设计django基于协同过滤的旅游推荐系统
    七、python ConfigParser模块
    无线传感器网络:传输层
    后端接口性能优化分析-数据库优化
    【Java】猫和狗接口版本思路分析
    CSP-S 2023 游记
    C++ 并发编程实战 第六章 设计基于锁的并发数据结构
    ChatGPT 沦为了我的打工仔
    windows添加了密码,结果报“ 引用的帐户当前已锁定,却可能无法登录”
    @Elasticsearch之深度应用及原理剖析--分布式数据一致性机制
  • 原文地址:https://blog.csdn.net/qq_27706119/article/details/133236561