首页 > 其他分享 >DER编码

DER编码

时间:2023-05-05 11:14:14浏览次数:31  
标签:编码 13 06 03 55 DER 30 31

一、任务详情

    参考附件中图书p120 中7.1的实验指导,完成DER编码
    Name实例中,countryName改为"CN",organization Name="你的学号" commonName="你的姓名拼音"
    用echo -n -e "编码" > 你的学号.der中,用OpenSSL asn1parse 分析编码的正确性
    提交编码过程文档(推荐markdown格式)
    附件:PKI.CA与数字证书技术大全.pdf

二、查看CN、姓名、学号的16进制ASCII码

echo -n "CN" | od -tc -tx1
echo -n "Huang Wengang" | od -tc -tx1
echo -n "20201331" | od -tc -tx1

三、DER编码示例:X.501Name类型
(一)ASN.1描述与实例
1.ASN.1描述

X.501Name类型用ASN.1描述如下:

Name::=CHOICE{ RDNSequence }
RDNSequence ::=SEQUENCE OF RelativeDistinguishedName
RelativeDistinguishedName ::=SET OF AttributeValueAssertion
Attribute ValueAssertion ::=SEQUENCE{
  AttributeType,
  AttributeValue}
AttributeType ::=OBJECT IDENTIFIER
Attribute Value ::=ANY

Name类型定义为CHOICE类型,目前只有1个选项RDNSequence。RDNSequence定义为SEQUENCE OF类型,由O个或多个RelativeDistinguishedName组成。RelativeDistinguished-Name定义为SET OF类型,由0个或多个AttributeValueAssertion组成。AttributeValueAssertion定义为SEQUENCE类型,由2个成分组成:1个为AttributeType类型和1个AttributeValue类型。AttributeType定义为OBJECT IDENTIFIER类型。AttributeValue定义为ANY类型,具体内容由AttributeType决定。
  事实上,Name类型可理解为分层或树形结构,即X.500目录树结构。
2.Name实例

对于用户Test User1,其对应的Name类型采用分层结构描述为:

其中,每层对应一个RelativeDistinguishedName;每个RelativeDistinguishedName由l个AttributeValueAssertion组成,等号前内容为AttributeType,等号后内容为AttributeValue。用户Test User 1包含3个AttributeType:countryName、organizationName、commonName,其OID定义如下:

attributeType OBJECT IDENTIFIER ::={joint-iso-ccitt(2) ds(5) 4}
countryName OBJECT IDENTIFIER ::={attributeType 6}
organizationName OBJECT IDENTIFIER ::={attributeType 10}
commonName OBJECT IDENTIFIER ::=

(二)DER编码过程
1.AttributeType编码

AttributeType为OBJECT IDENTIFIER基本类型,编码规则采用基本类型定长模式。
  对于标识串,采用低标识编码方式,只需1个字节。OBJECT IDENTIFIER的tag为0x06:class选择universal,则位8和位7为0,OBJECT IDENTIFIER为基本类型,则位6为0。因此,标识串=0x06。
  对于长度串,采用短型编码方式,只需1个字节。
  对于内容串,由3个字节组成。2.5.4.6编码为55 04 06,2.5.4.10编码为55 04 0A,2.5.4.3编码为55 04 03。
  具体编码过程如表7-1所示。
AttributeType OID定义 标识串 长度串 内容串
countryName 2.5.4.6 06 03 55 04 06
organizationName 2.5.4.10 06 03 55 04 0A
commonName 2.5.4.3 06 03 55 04 03
2.AttributeValue编码

AttributeValue为PrintableString基本类型,编码规则采用基本类型定长模式。
  对于标识串,采用低标识编码方式,只需1个字节。PrintableString的tag为0x13;class
选择universal,则位8和位7为0,OBJECT IDENTIFIER为基本类型,则位6为0。因此,标识串=0x13。
  对于长度串,采用短型编码方式,只需1个字节。
  对于内容串,由其ASCII码组成。
  具体编码过程如表7-2所示。
AttributeValue 标识串 长度串 内容串
"US" 13 02 55 53
"Example rganization" 13 14 45 78 61 6D 70 6C 65 20 4F 72
67 61 6E 69 7A 61 74 69 6F 6E
"Test User 1" 13 0B 54 65 73 74 20 55 73 65 72 20 31
"CN" 13 02 43 4E
"20201212" 13 08 32 30 32 30 31 32 31 32
"Yang Chengyu" 13 0C 59 61 6e 67 20 43 68 65 6e 67 79 75
3.AttributeValueAssertion编码

AttributeValueAssertion为SEQUENCE结构类型,编码规则采用结构类型定长模式。
  对于标识串,采用低标识编码方式,只需1个字节。SEQUENCE的tag为OxlO:class选择universal,则位8和位7为0,SEQUENCE为结构类型,则位6为1。因此,标识串0x30.
  对于长度串,采用短型编码方式,只需1个字节。
  对于内容串,由AttributeType和AttributeValue的DER编码值组成。
  具体编码过程如表7-3所示。
AttributeValueAssertion 标识串 长度串 内容串
countryName="US" 30 09 06 03 55 04 06
13 02 55 53
organizationName="Example rganization" 30 1B 06 03 55 04 0A
13 14 45 78 61 6D 70 6C 65 20 4F 72 67 61 6E 69 7A 61 74 69 6F 6E
commonName="Test User 1" 30 12 06 03 55 04 03
13 0B 54 65 73 74 20 55 73 65 72 20 31
countryName="CN" 30 09 06 03 55 04 06
13 02 43 4E
organizationName="20201212" 30 1B 06 03 55 04 0A
13 08 32 30 32 30 31 32 31 32
commonName="Yang Chengyu" 30 12 06 03 55 04 03
13 0C 59 61 6e 67 20 43 68 65 6e 67 79 75
4.RelativeDistinguishedName编码

RelativeDistinguishedName为SET OF结构类型,编码规则采用结构类型定长模式。
  对于标识串,采用低标识编码方式,只需1个字节。SET OF的tag为0xl1;class选择universal,则位8和位7为0,SET OF为结构类型,则位6为1。因此,标识串=0x31。
  对于长度串,采用短型编码方式,只需1个字节。
  对于内容串,由AttributeValueAssertion的DER编码值组成。
  具体编码过程如表7-4所示。
RelativeDistinguishedName 标识串 长度串 内容串
countryName="US" 31 0B 30 09
 06 03 55 04 06
 13 02 55 53
organizationName=
"Example rganization" 31 1D 30 1B
 06 03 55 04 0A
 13 14 45 78 61 6D 70 6C 65 20 4F 72
 67 61 6E 69 7A 61 74 69 6F 6E
commonName="Test User 1" 31 14 30 12
 06 03 55 04 03
 13 0B 54 65 73 74 20 55 73 65 72 20 31
countryName="CN" 31 0B 30 09
 06 03 55 04 06
 13 02 43 4E
organizationName=
"20201212" 31 11 30 0F
 06 03 55 04 0A
 13 08 32 30 32 30 31 32 31 32
commonName="Yang Chengyu" 31 15 30 13
 06 03 55 04 03
 13 0C 59 61 6e 67 20 43 68 65 6e 67 79 75
5.RDNSequence编码

RDNSequence为SEQUENCE OF结构类型,编码规则采用结构类型定长模式。
  对于标识串,采用低标识编码方式,只需1个字节。SEQUENCE OF的tag为0x10;class选择universal,则位8和位7为0,SEQUENCE OF为结构类型,则位6为1。因此,标识串=0x30。
  对于长度串,采用短型编码方式,只需1个字节。
  对于内容串,由3个RelativeDistinguishedName的DER编码值组成。
  具体编码过程如表7-5所示。
RDNSequence 标识串 长度串 内容串
countryName="US" 30 42 31 0B
 30 09
  06 03 55 04 06
  13 02 55 53
31 1D
 30 1B
  06 03 55 04 0A
  13 14 45 78 61 6D 70 6C 65 20 4F 72 67 61 6E 69 7A 61 74 69 6F 6E
31 14
 30 12
  06 03 55 04 03
  13 0B 54 65 73 74 20 55 73 65 72 20 31
countryName="CN" 30 37 31 0B
 30 09
  06 03 55 04 06
  13 02 43 4E
31 11
 30 0F
  06 03 55 04 0A
  13 08 32 30 32 30 31 32 31 32
31 15
 30 13
  06 03 55 04 03
  13 0C 59 61 6e 67 20 43 68 65 6e 67 79 75
6.Name编码

Name为CHOICE类型,其DER编码值与RDNSequence相同。
  用户Test User1最终DER编码值如表7-6所示。
DER编码值 ASN.1描述
30 42
 31 0B
  30 09
   06 03 55 04 06
   13 02 55 53
31 1D
 30 1B
  06 03 55 04 0A
  13 14
   45 78 61 6D 70 6C 65 20 4F 72 67
   67 61 6E 69 7A 61 74 69 6F 6E
31 14
 30 12
  06 03 55 04 03
  13 0B
   54 65 73 74 20 55 73 65 72 20 31 attributeType=countryName
attributeValue="US"

attributeType=organizationName
attributeValue="Example Organization"

attributeType=commonName
attributeValue="Test User 1"
30 37
 31 0B
  30 09
   06 03 55 04 06
   13 02 43 4E
31 11
 30 0F
  06 03 55 04 0A
  13 08
   32 30 32 30 31 32 31 32
31 15
 30 13
  06 03 55 04 03
  13 0C
   59 61 6e 67 20 43 68 65 6e 67 79 75 attributeType=countryName
attributeValue="CN"

attributeType=organizationName
attributeValue="20201331"

attributeType=commonName
attributeValue="Huang Wengang"
四、DER编码过程

验证:openssl asn1parse -inform der -in ./20201331.der

1.countryName="CN"

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

2.organization Name="20201331"

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

3.commonName="Huang Wengang"

echo -n -e "\x31\x15\x30\x13\x06\x03\x55\x04\x03\x13\x0C\x59\x61\x6e\x67\x20\x43\x68\x65\x6e\x67\x79\x75" >> 20201331.der

标签:编码,13,06,03,55,DER,30,31
From: https://www.cnblogs.com/killerqueen4/p/17373532.html

相关文章

  • 数字证书编码ASN.1
    一、查看姓名、学号的16进制ASCII码echo-n"hanjin"|od-tc-tx1echo-n"20201206"|od-tc-tx1二、对TBSCertificate进行DER编码1.序列号1174(0x0496)echo-n-e"\xA0\x03\x02\x01\x02\x02\x02\x04\x96\x30\x0D\x06\x09\x2A\x86\x48\x86\x......
  • 5月4日:unordermap/set,哈希以及哈希常用的拉链法,开放地址法,以及模板的特化相关应用
    起处较为流行的数据储存方式为树形结构,再加上红黑树等优秀数据结构的发展,直到今天二叉平衡搜索树也经常被应用在各种方面,但是c++库里面还有两个与map/set很像的容器unorderedmap,他们的调用与普通的map几乎一样,有着非常优秀的查找时间复杂度,只是不能像二叉树哪样层序遍历得到顺序的......
  • 康托编码与解码
    简介对于一个集合{1,2,...,n},其不同排列有\(n!\)种,将各种排列按照字典序从小到大编号(0~\(n!-1\))。康托编码与解码旨在解决这么一个问题:给定一个排列X,它的序号是多少。或者给定一个序号,它的排列是怎么样的。康托表达式\(X=f(n)\cdot(n-1)!+f(n-1)\cdot(n-2)!+......
  • [oeasy]python0048_注释_comment_设置默认编码格式
    注释Comment回忆上次内容使用了版本控制git制作备份进行回滚 尝试了嵌套的控制结构层层控制 不过除非到不得以尽量不要太多层次的嵌套 这样从顶到底含义明确而且还扁平 扁平也能含义明确......
  • 新的RSS reader
    feedspot的相关快捷键如下:Keyboardshortcuts(Shift+?)Navigationj/knext/previousitemspacenextitemorpageShift+spacepreviousitemorpagen/pitemscandown/up(listonly)Shift+n/pnext/previoussubscriptionShift+xexpandfolderShift+o......
  • RK 3568 normal模式/loader模式/MASKROM模式
    RK3288/RK3399启动后有三种模式:normal模式、loader模式、MASKROM模式 normal模式:正常的启动模式,这个模式无法刷固件。一般板子通电就是这个模式。loader模式:刷固件模式,这个模式可以刷各种image。按住recover按键再通电,通过bootloader/uboot的检测进......
  • 该方法实现网页编码的自动识别和转换
    """该方法实现网页编码的自动识别和转换"""#python第三方库chardet不可靠,把gbk编码解析成Windows-1254@retry(stop_max_attempt_number=5,wait_random_min=2000,wait_random_max=20000,)defpage_trancode(content):codes=chardet.detect(content)ifcodes[&......
  • 一款windows清理空间神器 foldersize
    windows不能显示所有文件夹占用的大小是个痛点,当磁盘空间不够时,想找出大文件很麻烦 foldersize就是很好的解决方案,还是免费的,不过 foldersize官网不好找,网上有很多收费的仿冒品,这里贴出他的官网:https://foldersize.sourceforge.net/ 他的界面如下,炒鸡好用,墙裂推荐: ......
  • AtCoder Regular Contest 128 E K Different Values
    洛谷传送门AtCoder传送门考虑判断有无解。把序列分成\(c=\left\lceil\frac{len}{k}\right\rceil\)段,则\(\foralla_i\lec\)且\(\sum\limits_{i=1}^n[a_i=c]\le((len-1)\bmodk)+1\)。必要性显然。充分性可以考虑直接构造,不难证明。考虑如何构造字典序最小......
  • Uniapp HBuilderX 编译 运行到手机 内存不足:***** out of memory
    HBuilderX内置node版本是32位,如果遇到JavaScriptheapoutofmemory问题,可以自行下载64位的Node进行替换替换HBuilderX 内置的node.exe文件:HBuilderX\plugins\node\node.exe用自己安装的node里面的 node.exe文件即可。替换过后再次运行会提示安装对应的binding.node......