任务详情
-
参考附件中图书p120中7.1的实验指导,完成DER编码。
-
在Name实例中,将
countryName
改为 “CN”,organizationName
改为你的学号,commonName
改为你的姓名拼音。 -
使用以下命令:
echo -n -e "编码" > 你的学号.der
然后使用 OpenSSL 的asn1parse
工具分析编码的正确性。 -
提交编码过程文档(推荐使用 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
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
- 31 0B:这是一个ASN.1的SEQUENCE的起始标记,后面跟着长度为 0x0B(11)个字节的内容。
- 30 09:又一个ASN.1的SEQUENCE的起始标记,后面跟着长度为 0x09(9)个字节的内容。
- 06 03 55 04 06:这是一个表示 "countryName" 的OID(对象标识符)。
- 13 02:这个字段的长度为 0x02(2)个字节。
- 43 4E:这是十六进制编码的数据。解码后为 "CN",代表 "Country Name",通常用于指代国家名称。
- 所以,这段编码表示了一个 "Country Name" 字段,其值为 "CN",即"国家名称"字段的值为"CN"。
organizationName
31 11 30 0F 06 03 55 04 0A 13 08 32 30 32 31 31 31 30 38
- 31 11:这是一个ASN.1的SEQUENCE的起始标记,后面跟着长度为 0x11(17)个字节的内容。
- 30 0F:又一个ASN.1的SEQUENCE的起始标记,后面跟着长度为 0x0F(15)个字节的内容。
- 06 03 55 04 0A:这是一个表示 "organizationName" 的OID(对象标识符)。
- 13 08:这个字段的长度为 0x08(8)个字节。
- 32 30 32 31 31 31 30 38:这是十六进制编码的数据。解码后为 "20211108"。
- 因此,这段编码表示了一个 "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
- 31 13:这是一个ASN.1的SEQUENCE的起始标记,后面跟着长度为 0x13(19)个字节的内容。
- 30 11:又一个ASN.1的SEQUENCE的起始标记,后面跟着长度为 0x11(17)个字节的内容。
- 06 03 55 04 03:这是一个表示 "commonName" 的OID(对象标识符)。
- 12 0A:这个字段的长度为 0x0A(10)个字节
- 79 75 7a 68 65 6e 79 61 6e 67:这是十六进制编码的数据。解码后为 "yuzhenyang"。
- 因此,这段编码表示了一个 "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
标签:编码,x30,x31,DER,30,20211108,hl,31
From: https://www.cnblogs.com/yuzhenyang/p/18105834