首页 > 其他分享 >数字证书编码ASN.1

数字证书编码ASN.1

时间:2023-04-26 18:33:20浏览次数:31  
标签:x32 编码 x30 ASN.1 32 30 x06 数字证书

目录

要求

  1. 参考附件中图书p223 中13.2的实验指导,完成DER编码
  2. 序列号=1174(0x0496),证书签发者 DN="CN=Virtual CA,C=CN",证书持有者DN="CN=你的名字拼音, OU=Person,C=CN",证书有效期> =20200222000000-20220222000000。
  3. 用echo -n -e "编码" > 你的学号.der中,用OpenSSL asn1parse 分析编码的正确性
  4. 提交编码过程文档(推荐markdown格式)

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

echo -n "xuyuan" | od -tc -tx1
echo -n "20201324" | od -tc -tx1

国家学号姓名

AttributeType编码

AttributeType为OBJECT IDENTIFIER基本类型,编码规则采用基本类型定长模式。

对于标识串,采用低标识编码方式,只需1个字节。OBJECT IDENTIFIER的tag 为Ox06;class选择universal,则位8和位7为0,OBJECT IDENTIFIER为基本类型,则位6为0。因此,标识串=Ox06(0000 1010)

对于长度串,采用短型编码方式,只需1个字节

此时,countryName为‘’CN‘’,organizationName为学号,即“20201324”,commonName为姓名,即“xuyuan”

对于内容串,由3个字节组成。

2.5.4.6编码为55 04 06,

2.5.4.10编码为55 04 0A,

2.5.4.3编码为55 04 03

Attribute ValueAssertion编码

对于标识串,采用低标识编码方式,只需1个字节。SEQUENCE的 tag 为0x10;class选择universal,则位8和位7为0,SEQUENCE为结构类型,则位6为1。因此,标识串=0x30。

tag   0X10 = 0001 0000
标识串        0011 0000 = 0x30

对于长度串,采用短型编码方式,只需1个字节。

对于内容串,由AttributeType和 AttributeValue的 DER编码值组成。(注意不是内容串拼接,是der值拼接)

RelativeDistinguishedName

对于标识串,采用低标识编码方式,只需1个字节。SET OF的 tag 为0x11; class 选择universal,则位8和位7为0,SET OF为结构类型,则位6为1。因此,标识串=0x31。

tag:                 0x11 = 0001 0001
SEQUENCE OF为结构类型:        0011 0001  = 0x31

对于长度串,采用短型编码方式,只需1个字节。

对于内容串,由Attribute ValucAssertion的DER编码值组成

RDNSequence编码

对于标识串,采用低标识编码方式,只需1个字节。SEQUENCE OF的 tag 为0x10;class选择universal,则位8和位7为0,SEQUENCE OF为结构类型,则位6为1。因此,标识串=0x30。

tag:                 0x10 = 0001 0000
SEQUENCE OF为结构类型:        0011 0001  = 0x30

对于长度串,采用短型编码方式,只需1个字节。

对于内容串,由3个 RelativeDistinguishedName的 DER编码值组成。

Name编码

Name为CHOICE类型,其DER编码值与RDNSequence相同。

综上可得最终DER编码值

30 31
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 33 32 34 
31 0F
      30 0D
            06 03 55 04 03
           		 13 06
                     78 75 79 75 61 6e
echo -n -e "\x30\x31\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x43\x4E\x31\x11\x30\x0F\x06\x03\x55\x04\x0A\x13\x08\x32\x30\x32\x30\x31\x33\x32\x34\x31\x0F\x30\x0D\x06\x03\x55\x04\x03\x13\x06\x78\x75\x79\x75\x61\x6E" >> 20201324.der

UTC Time编码(对有效期编码)

由表知标记符为0x17

20200222000000 转 16进制 32 30 32 30 30 32 32 32 30 30 30 30 30 30

20220222000000 转 16进制 32 30 32 32 30 32 32 32 30 30 30 30 30 30

Integer编码(对序列号编码)

标记符为0x02

验证

//序列号1174(0x0496)
echo -n -e "\x02\x02\x04\x96" > 20201324.der

//证书签发者DN="CN=Virtual CA
echo -n -e "\x30\x22\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x43\x4E\x31\x13\x30\x11\x06\x03\x55\x04\x03\x13\x0A\x56\x69\x72\x74\x75\x61\x6C\x20\x43\x41" >> 20201324.der

//证书有效期=20200222000000-20220222000000
echo -n -e "\x17\x0D\x32\x30\x32\x30\x30\x32\x32\x32\x30\x30\x30\x30\x5A\x17\x0D\x32\x30\x32\x32\x30\x32\x32\x32\x30\x30\x30\x30\x5A" >> 20201324.der

//证书持有者DN="CN=你的名字拼音, OU=Person,C=CN
echo -n -e "\x30\x31\x31\x0B\x30\x09\x06\x03\x55\x04\x06\x13\x02\x43\x4E\x31\x11\x30\x0F\x06\x03\x55\x04\x0A\x13\x08\x32\x30\x32\x30\x31\x33\x32\x34\x31\x0F\x30\x0D\x06\x03\x55\x04\x03\x13\x06\x78\x75\x79\x75\x61\x6E" >> 20201324.der

openssl asn1parse -inform der -in ./20201324.der

验证正确

标签:x32,编码,x30,ASN.1,32,30,x06,数字证书
From: https://www.cnblogs.com/cqszxy2020/p/17356942.html

相关文章

  • Java+proj4j实现根据EPSG编码进行坐标系转换
    场景Java+GeoTools实现WKT数据根据EPSG编码进行坐标系转换:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/130370754上面使用GeoTools实现坐标系转换。Vue+Openlayers+proj4实现坐标系转换:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/13038879......
  • 《C# in depth》第5章C#5.0中的更改(十二)——指针和非安全编码
    指针类型是一种C#5.0中引入的不安全代码特性,它允许程序员直接访问内存地址,以及使用指向变量和对象的指针。指针类型可以帮助程序员处理一些高性能场景,例如在大型数组中查找数据。指针类型需要使用unsafe关键字定义,表示这段代码中存在潜在的危险操作。在unsafe代码块中,可以......
  • ASN.1 证书编码
     一、任务详情参考附件中图书p223中13.2的实验指导,完成DER编码序列号=1174(0x0496),证书签发者DN="CN=VirtualCA,C=CN",证书持有者DN="CN=你的名字拼音,OU=Person,C=CN",证书有效期=20200222000000-20220222000000。用echo-n-e"编码">你的学号.der中,用OpenSSLasn1parse分......
  • ASN.1 测试
    在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务对你的8位学号(数字)进行der编码,写入1.der文件中对你的8位学号(文本)进行der编码,写入2.der文件中3,使用oepnssl命令分析上面两个der文件提交过程截图......
  • ASN.1 基础测试
    1参考https://www.cnblogs.com/rocedu/p/14891816.html#echo打印字符串和变量值2十六进制数:30030201AA,写入文件1.der,用od查看内容,用asn1view或opensslasn1pars命令查看内容,提交截图3十六进制数:3013020105160e416e79626f64792074686572653f,写......
  • Java+GeoTools实现WKT数据根据EPSG编码进行坐标系转换
    场景Java+GeoTools(开源的JavaGIS工具包)快速入门-实现读取shp文件并显示:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/130367852在上面实现Java中集成Geotools之后,需求是将WKT数据转换成其他坐标系的WKT。比如说将EPSG:4524的坐标系转换成EPSG:2334的坐标系......
  • Base64 编码的字符串转换为 Blob 对象方法
    constblob=function(data:string,mime:string){data=data.split(',')[1];data=window.atob(data);letia=newUint8Array(data.length);for(vari=0;i<data.length;i++){ia[i]=data.charCodeAt(i);};returnnew......
  • SciTE4AutoHotkey新建文件默认编码 UTF-8 with BOM
    若SciTE4AutoHotkey,能在新建时自动选编码为 带BOM的UTF-8的就省事省心了。可通过配置SciTEGlobal.properties、SciTEUser.properties无法解决这个难题,似乎是个bug。通过菜单 工具Scite4AutoHotkeysettings...设置也只能使新建的文件编码为UTF-8NOBOM经过无数次的搜索以......
  • m基于EAN13字符编码规则的一维条形码条码宽度计算和数字译码matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下:2.算法涉及理论知识概要条码技术是在计算机的应用实践中产生和发展起来的一种自动识别技术,条码应用技术就是应用条码系统进行的信息处理技术。条码技术的研究始于20世纪中期,是继计算机技术应用和发展应运而生的。随着70年代微处理器的问......
  • Problem I: base64编码
    ProblemDescription对于任意二进制文件(如图像、声音、视频、程序等),都可以用base64编码。base64编码方法:先把二进制代码划分为一系列24位长的单元,然后把每一个24位单元划分为4个6位的组。每一个6位组按下列方法转换为ASCII码。6位二进制有64个不同的值,0-63。用A表示0,B表示1,等。2......