DER编码

任务详情

  1. 参考附件中图书p120中7.1的实验指导,完成DER编码。

  2. 在Name实例中,将 countryName 改为 “CN”, organizationName 改为你的学号, commonName 改为你的姓名拼音。

  3. 使用以下命令: echo -n -e "编码" > 你的学号.der 然后使用 OpenSSL 的 asn1parse 工具分析编码的正确性。

  4. 提交编码过程文档(推荐使用 Markdown 格式)。

查看16进制编码

[openeuler@localhost Desktop]$ echo -n "CN" | od -tc -tx1
0000000   C   N
         43  4e
0000002
[openeuler@localhost Desktop]$ echo -n "20211108" | od -tc -tx1
0000000   2   0   2   1   1   1   0   8
         32  30  32  31  31  31  30  38
0000010
[openeuler@localhost Desktop]$ echo -n "yuzhenyang" | od -tc -tx1
0000000   y   u   z   h   e   n   y   a   n   g
         79  75  7a  68  65  6e  79  61  6e  67
0000012

image

43  4e
32  30  32  31  31  31  30  38
79  75  7a  68  65  6e  79  61  6e  67

计算对应编码内容

countryName

31 0B 30 09 06 03 55 04 06 13 02 43 4E

  1. 31 0B:这是一个ASN.1的SEQUENCE的起始标记,后面跟着长度为 0x0B(11)个字节的内容。
  2. 30 09:又一个ASN.1的SEQUENCE的起始标记,后面跟着长度为 0x09(9)个字节的内容。
  3. 06 03 55 04 06:这是一个表示 "countryName" 的OID(对象标识符)。
  4. 13 02:这个字段的长度为 0x02(2)个字节。
  5. 43 4E:这是十六进制编码的数据。解码后为 "CN",代表 "Country Name",通常用于指代国家名称。
  6. 所以,这段编码表示了一个 "Country Name" 字段,其值为 "CN",即"国家名称"字段的值为"CN"。

organizationName

31 11 30 0F 06 03 55 04 0A 13 08 32 30 32 31 31 31 30 38

  1. 31 11:这是一个ASN.1的SEQUENCE的起始标记,后面跟着长度为 0x11(17)个字节的内容。
  2. 30 0F:又一个ASN.1的SEQUENCE的起始标记,后面跟着长度为 0x0F(15)个字节的内容。
  3. 06 03 55 04 0A:这是一个表示 "organizationName" 的OID(对象标识符)。
  4. 13 08:这个字段的长度为 0x08(8)个字节。
  5. 32 30 32 31 31 31 30 38:这是十六进制编码的数据。解码后为 "20211108"。
  6. 因此,这段编码表示了一个 "Organization Name" 字段,其值为 "20211108",即"组织名称"字段的值为"20211108"。

commonName

31 13 30 11 06 03 55 04 03 12 0A 79 75 7a 68 65 6e 79 61 6e 67

  1. 31 13:这是一个ASN.1的SEQUENCE的起始标记,后面跟着长度为 0x13(19)个字节的内容。
  2. 30 11:又一个ASN.1的SEQUENCE的起始标记,后面跟着长度为 0x11(17)个字节的内容。
  3. 06 03 55 04 03:这是一个表示 "commonName" 的OID(对象标识符)。
  4. 12 0A:这个字段的长度为 0x0A(10)个字节
  5. 79 75 7a 68 65 6e 79 61 6e 67:这是十六进制编码的数据。解码后为 "yuzhenyang"。
  6. 因此,这段编码表示了一个 "Common Name" 字段,其值为 "yuzhenyang",即"通用名称"字段的值为"yuzhneyang"。

验证

验证命令:openssl asn1parse -inform der -in ./20211108.der

countryName

echo -n -e "\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x43\x4E" >> 20211108.der

organizationName

echo -n -e "\x31\x11\x30\x0F\x06\x03\x55\x04\x0A\x13\x08\x32\x30\x32\x31\x31\x31\x30\x38" >> 20211108.der

commonName

echo -n -e "\x31\x13\x30\x11\x06\x03\x55\x04\x03\x12\x0A\x79\x75\x7a\x68\x65\x6e\x79\x61\x6e\x67" >> 20211108.der

结果

[root@localhost 3.30]# echo -n -e "\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x43\x4E"

 >> 20211108.der
[root@localhost 3.30]# echo -n -e "\x31\x11\x30\x0F\x06\x03\x55\x04\x0A\x13\x08\x32\x30\x32\x31\x31\x31\x30\x38" >> 20211108.der
[root@localhost 3.30]# echo -n -e "\x31\x11\x30\x0F\x06\x03\x55\x04\x0A\x13\x08\x32\x30\x32\x31\x31\x31\x30\x38" >> 20211108.der
[root@localhost 3.30]# openssl asn1parse -inform der -in ./20211108.der
    0:d=0  hl=2 l=  11 cons: SET               
    2:d=1  hl=2 l=   9 cons: SEQUENCE          
    4:d=2  hl=2 l=   3 prim: OBJECT            :countryName
    9:d=2  hl=2 l=   2 prim: PRINTABLESTRING   :CN
   13:d=0  hl=2 l=  17 cons: SET               
   15:d=1  hl=2 l=  15 cons: SEQUENCE          
   17:d=2  hl=2 l=   3 prim: OBJECT            :organizationName
   22:d=2  hl=2 l=   8 prim: PRINTABLESTRING   :20211108
   32:d=0  hl=2 l=  17 cons: SET               
   34:d=1  hl=2 l=  15 cons: SEQUENCE          
   36:d=2  hl=2 l=   3 prim: OBJECT            :organizationName
   41:d=2  hl=2 l=   8 prim: PRINTABLESTRING   :20211108

image

posted @ 2024-03-30 18:14  20211108俞振阳  阅读(7)  评论(0编辑  收藏  举报