首页 > 其他分享 >DER编码

DER编码

时间:2024-03-29 12:22:23浏览次数:32  
标签:编码 13 06 03 55 DER 30 31

一、任务详情

  1. 参考附件中图书p120 中7.1的实验指导,完成DER编码
  2. Name实例中,countryName改为“CN”,organization Name-"你的学号" commoaName="你的姓名拼音"
  3. 用echo -n -e "编码" > 你的学号.der中,用OpenSSL asn1parse 分析编码的正确性
  4. 提交编码过程文档(推荐markdown格式)

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

三、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。
  具体编码过程如下表所示。

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码组成。
  具体编码过程如表所示。

AttributeValue 标识串 长度串 内容串
"US" 13 02 55 53
"Example Organization" 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
"20211125" 13 08 32 30 32 31 31 31 32 35
"Miao Jingzhang" 13 0E 4D 69 61 6F 20 4A 69 6E 67 7A 68 61 6E 67

3.AttributeValueAssertion编码

AttributeValueAssertion为SEQUENCE结构类型,编码规则采用结构类型定长模式。
  对于标识串,采用低标识编码方式,只需1个字节。SEQUENCE的tag为OxlO:class选择universal,则位8和位7为0,SEQUENCE为结构类型,则位6为1。因此,标识串0x30.
  对于长度串,采用短型编码方式,只需1个字节。
  对于内容串,由AttributeType和AttributeValue的DER编码值组成。
  具体编码过程如表所示。

AttributeValueAssertion 标识串 长度串 内容串
countryName="US" 30 09 06 03 55 04 06 13 02 55 53
organizationName="Example Organization" 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="20211125" 30 11 06 03 55 04 0A 13 08 32 30 32 31 31 31 32 35
commonName="Miao Jingzhang" 30 15 06 03 55 04 03 13 0D 4D 69 61 6F 20 4A 69 6E 67 7A 68 61 6E 67

4.RelativeDistinguishedName编码

RelativeDistinguishedName为SET OF结构类型,编码规则采用结构类型定长模式。
  对于标识串,采用低标识编码方式,只需1个字节。SET OF的tag为0xl1;class选择universal,则位8和位7为0,SET OF为结构类型,则位6为1。因此,标识串=0x31。
  对于长度串,采用短型编码方式,只需1个字节。
  对于内容串,由AttributeValueAssertion的DER编码值组成。
  具体编码过程如表所示。

RelativeDistinguishedName 标识串 长度串 内容串
countryName="US" 31 0B 30 09 06 03 55 04 06 13 02 55 53
organizationName="Example Organization" 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="20211125" 31 11 30 0F 06 03 55 04 0A 13 08 32 30 32 31 31 31 32 35
commonName="Miao Jingzhang" 31 15 30 15 06 03 55 04 03 13 0E 4D 69 61 6F 20

5.RDNSequence编码

RDNSequence为SEQUENCE OF结构类型,编码规则采用结构类型定长模式。
  对于标识串,采用低标识编码方式,只需1个字节。SEQUENCE OF的tag为0x10;class选择universal,则位8和位7为0,SEQUENCE OF为结构类型,则位6为1。因此,标识串=0x30。
  对于长度串,采用短型编码方式,只需1个字节。
  对于内容串,由3个RelativeDistinguishedName的DER编码值组成。
  具体编码过程如表所示。

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编码值如表所示。

DER编码值 ASN.1描述
30 42
31 0B
30 09
06 03 55 04 06 attributeType=countryName
13 02 55 53 attributeValue="US"
31 1D
30 1B
06 03 55 04 0A attributeType=organizationName
13 14
45 78 61 6D 70 6C 65 20 4F 72 67
67 61 6E 69 7A 61 74 69 6F 6E attributeValue="Example Organization"
31 14
30 12
06 03 55 04 03 attributeType=commonName
13 0B
54 65 73 74 20 55 73 65 72 20 31 attributeValue="Test User 1"
30 37
31 0B
30 09
06 03 55 04 06 attributeType=countryName
13 02 43 4E attributeValue="CN"
31 11
30 0F
06 03 55 04 0A attributeType=organizationName
13 08
32 30 32 31 31 31 32 35 attributeValue="20211125"
31 17
30 15
06 03 55 04 03 attributeType=commonName
13 0E
4D 69 61 6F 20 4A 69 6E 67 7A 68 61 6E 67 attributeValue="Miao Jingzhang"

四、DER编码过程

验证openssl asn1parse -inform der -in ./20211125.der

1.countryName="CN"

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

2.organization Name="2021125"

echo -n -e "\x31\x11\x30\x0F\x06\x03\x55\x04\x0A\x32\x30\x32\x31\x31\x31\x32\x35" >> 20211125.der

3.commonName="Miao Jingzhang"

echo -n -e "\x31\x15\x30\x13\x06\x03\x55\x04\x03\x13\x0E\x4D\x69\x61\x6F\x20\x4A\x69\x6E\x67\x7A\x68\x61\x6E\x67" >> 20211125.der

标签:编码,13,06,03,55,DER,30,31
From: https://www.cnblogs.com/20211125mjz/p/18103562

相关文章

  • Uncaught (in promise) DOMException: Failed to execute 'setRequestHeader' on 'XML
    根据错误提示"Uncaught(inpromise)DOMException:Failedtoexecute'setRequestHeader'on'XMLHttpRequest':Theobject'sstatemustbeOPENED.",你遇到了一个错误,该错误表明在调用setRequestHeader方法时,XMLHttpRequest对象的状态必须是已打开(OPENED)的状态。解决此问......
  • WPF实现placeholder效果
     概述:WPF中通过`Style`实现TextBox水印文本,使用`WatermarkTextBox`类及`ControlTemplate`。这个示例通过`VisualStateManager`在文本框失去焦点且内容为空时显示水印文本。通过`Watermark`属性简化水印文本设置,提高可维护性。在WPF中,通过Style实现TextBox中的水印文本(水印、......
  • 【前端面试题-20】js如何对输出内容进行HTML编码
    在JavaScript中,对输出内容进行HTML编码通常是为了防止XSS攻击(跨站脚本攻击),即将特殊字符转换成HTML实体的形式,避免它们被浏览器解析为HTML或JavaScript代码。以下是一些常见的HTML编码方法:使用内建函数encodeURIComponent()和encodeURI()虽然这两个函数主要用于编码URI......
  • Fiddler(6)AutoResponder,重定向
    Fiddler最实用的功能,它可以抓取在线页面保存到本地进行调试,大大减少了在线调试的困难,可以让我们修改服务器端返回的数据 Enablerules 启用规则Unmatchedrequestspassthrough 没有匹配到的请求予以通过(建议开启;没开启时,规则匹配外的请求将失败,报HTTP404错误)Enabl......
  • DotNetty客户端获取未编码的16进制数据
    publicoverridevoidChannelRead(IChannelHandlerContextcontext,objectmessage){varbuffer=messageasIByteBuffer;Console.WriteLine($"收到消息{buffer}");if(buffer!=null){//这里可以处理接收到的数据byte[]b......
  • 硬件组成-CPU-编码-浮点数
    计算机的基本硬件系统由运算器、控制器、存储器、输入设备和输出设备5大部件组成。运算器、控制器等部件被集成在一起统称为中央处理单元(CPU)。CPU是硬件系统的核心,用于数据的加工处理,能完成各种算术、逻辑运算及控制功能。存储器是计算机系统中的记忆设备,分为内部存储器和......
  • Unity Shader中的Dot点乘解惑篇(转)
    光照中的点乘应用漫反色中的核心函数fixed4diff=albedo*_LightColor0*max(0,dot(i.worldNormal,worldLight));当worldLight为float3(0,1,0),时,主要分析该函数dot(float3(0,1,0),i.normal);点乘两个向量,我们知道向量归一化以后向量点乘的值是向量的夹角的Cos......
  • AtCoder Beginner Contest 346
    AtCoderBeginnerContest346比赛链接A-AdjacentProduct思路:b[i]=a[i]*a[i+1]Code#include<bits/stdc++.h>usingnamespacestd;#defineintlonglong#defineall(x)x.begin()+1,x.end()voidsolve(){ intn; cin>>n; std::vector<in......
  • ImportError: cannot import name ‘OrderedDict‘ from ‘typing‘
    问题描述使用timm时fromtimm.models.vision_transformerimportBlock遇到报错:"xxx/lib/python3.7/site-packages/torchvision/models/maxvit.py",line3,in<module>fromtypingimportAny,Callable,List,Optional,OrderedDict,Sequence,TupleImportE......
  • ModuleNotFoundError: No module named ‘paddle.fluid.layers.utils‘关于paddle和pa
    训练模型时候发现的问题:1.ValueError:PretrainedConfiginstancenotfoundinthearguments,youcansetitasargsorkwargswithconfigfield2:ModuleNotFoundError:Nomodulenamed‘paddle.fluid.layers.utils‘对于第一个问题的发生,我先是检查uie-base,但是没......