ASN.1-PKCS10

news2024/10/6 12:34:56

ASN1采用一个个的数据块来描述整个数据结构,每个数据块都有四个部分组成:

1、数据块数据类型标识(一个字节)

数据类型包括简单类型和结构类型。

简单类型是不能再分解类型,如整型(INTERGER)、比特串(BIT STRING)、字节串(OCTET STRING)、对象标示符(OBJECT IDENTIFIER)、日期型(UTCTime)等。

结构类型是由简单类型和结构类型组合而成的,如顺序类型(SEQUENCE, SEQUENCE OF)、选择类型(CHOICE)、集合类型(SET)等。

l         顺序类型的数据块值由按给定顺序成员成员数据块值按照顺序组成,;

l         选择类型的数据块值由多个成员数据数据块类型中选择一个的数据块值;

l         集合数据块类型由成员数据块类型的一个或多个值构成。

这个标识字节的结构如下:

1.1.        Bit8-bit7

用来标示 TAG 类型,共有四种,分别是universal(00)、application(01)、context-specific(10)和private(11)。

这两位为universal(00)时,bit5-bit1的值表示不同的universal的值:

标记(TAG)   对应类型

[UNIVERSAL 1] BOOLEAN [有两个值:false或true]

[UNIVERSAL 2] INTEGER [整型值]

[UNIVERSAL 3] BIT STRING [0位或多位]

[UNIVERSAL 4] OCTET STRING [0字节或多字节]

[UNIVERSAL 5] NULL

[UNIVERSAL 6] OBJECT IDENTIFIER [相应于一个对象的独特标识数字]

[UNIVERSAL 7] OBJECT DESCRIPTOR  [一个对象的简称]

[UNIVERSAL 8] EXTERNAL, INSTANCE OF [ASN.1没有定义的数据类型]

[UNIVERSAL 9] REAL [实数值]

[UNIVERSAL 10] ENUMERATED [数值列表,这些数据每个都有独特的标识符,作为ASN.1定义数据类型的一部分]

[UNIVERSAL 12] UTF8String

[UNIVERSAL 13] RELATIVE-OID

[UNIVERSAL 16] SEQUENCE, SEQUENCE OF [有序数列,SEQUENCE里面的每个数值都可以是不同类型的,而SEQUENCE OF里是0个或多个类型相同的数据]

[UNIVERSAL 17] SET, SET OF [无序数列,SET里面的每个数值都可以是不同类型的,而SET OF里是0个或多个类型相同的数据]

[UNIVERSAL 18] NumericString [0-9以及空格]

[UNIVERSAL 19] PrintableString [A-Z、a-z、0-9、空格以及符号'()+,-./:=?]

[UNIVERSAL 20] TeletexString, T61String

[UNIVERSAL 21] VideotexString

[UNIVERSAL 22] IA5String

[UNIVERSAL 23] UTCTime [统一全球时间格式] (jaydon add ,比如 0x17)

[UNIVERSAL 24] GeneralizedTime

[UNIVERSAL 25] GraphicString

[UNIVERSAL 26] VisibleString, ISO646String

[UNIVERSAL 27] GeneralString

[UNIVERSAL 28] UniversalString

[UNIVERSAL 29] CHARACTER STRING

[UNIVERSAL 30] BMPString

[UNIVERSAL 31]... reserved for future use

1.2.        bit6

表示是否为结构类型(1位结构类型);0则表明编码类型是简单类型。

bit6为 0 不再解析

1.3.        bit5-bit1

是类型的TAG值。根据bit8-bit7的不同值有不同的含义,具体含义见上面的描述。

如 SEQUENCE 类型数据块,其TAG类型位UNIVERSAL(00),属于结构类型(1),TAG值为16(10000)所以其类型标示字段值为(00110000),即为0x30。

再如,证书扩展字段类型的数据块,TAG类型为(10),属结构类型(1),TAG的值为3(00011),所以其类型标示字段值为(10100011),即为0xA3

context-specific

这两位为context-specific(10)时,bit5-bit1的值表示特殊内容:

[0] –- 表示证书的版本 (add: A0 )

[1] –- issuerUniqueID,表示证书发行者的唯一id

[2] –- subjectUniqueID,表示证书主体的唯一id

[3] –- 表示证书的扩展字段 (add: A3 )

示例

0x30

二进制 :  0011 0000

Bit8 Bit7 是universal(00) 

Bit6 是1 为结构类型(1位结构类型)

Bit5-Bit1的值表示不同的universal的值: 0x1 0000 = 16  ,解析如下:

[UNIVERSAL 16] SEQUENCE, SEQUENCE OF [有序数列,SEQUENCE里面的每个数值都可以是不同类型的,而SEQUENCE OF里是0个或多个类型相同的数据]

 

0x02

二进制 :  0000 0010

Bit8 Bit7 是universal(00) 

Bit6 是0 为简单类型

Bit5-Bit1的值表示不同的universal的值: 0x0 0010 = 2  ,解析如下:

[UNIVERSAL 2] INTEGER [整型值]

 

0x31

二进制 :  0011 0001

Bit8 Bit7 是universal(00) 

Bit6 是1 为结构类型(1位结构类型)

Bit5-Bit1的值表示不同的universal的值: 0x1 0001 = 17  ,解析如下:

[UNIVERSAL 17] SET, SET OF [无序数列,SET里面的每个数值都可以是不同类型的,而SET OF里是0个或多个类型相同的数据]

 

0x06

二进制 :  0000 0110

Bit8 Bit7 是universal(00) 

Bit6 是0为简单类型

Bit5-Bit1的值表示不同的universal的值: 0x0 0110 = 6  ,解析如下:

[UNIVERSAL 6] OBJECT IDENTIFIER [相应于一个对象的独特标识数字]

 

0x13

二进制 :  0001 0011

Bit8 Bit7 是universal(00) 

Bit6 是0为简单类型

Bit5-Bit1的值表示不同的universal的值: 0x1 0011 =19  ,解析如下:

[UNIVERSAL 19] PrintableString [A-Z、a-z、0-9、空格以及符号'()+,-./:=?]

 

0x0C

二进制 :  0000 1100

Bit8 Bit7 是universal(00) 

Bit6 是0为简单类型

Bit5-Bit1的值表示不同的universal的值: 0x0 1100 =12,解析如下:

[UNIVERSAL 12] UTF8String

 

0x03

二进制 :  0000 0011

Bit8 Bit7 是universal(00) 

Bit6 是0 为简单类型

Bit5-Bit1的值表示不同的universal的值: 0x0 0011 = 3  ,解析如下:

 [UNIVERSAL 3] BIT STRING [0位或多位]

 

0xA0

二进制 :  1010 0000

Bit8 Bit7 是context-specific(10)

Bit6 是1 为结构类型(1位结构类型)

Bit5-Bit1  0 0000 解析如下:

Bit8 Bit7 是context-specific(10)时,bit5-bit1的值表示特殊内容

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/496448.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Unity】搭建Jenkins打包工作流,远程打热更、构建App

Jenkins是团队协作项目打包常用的工作流,不多做介绍。 Jenkins的部署Unity打包环境还是非常简单的: 工作流程如下: 1. 在Jenkins中添加打包配置参数(如: 版本号, 目标平台等), 参数将以UI的形式显示在Jenkins Web界面以便打包前填写参数&a…

机器人抓取检测——Dex-Net

如今,在各种期刊顶会都能看到平面抓取检测的论文,他们声称能应对多物体堆叠场景,然而实际效果都不尽人意,我认为主要原因有如下几点: 缺乏多物体堆叠场景的抓取数据集。现在最常用的Cornell Grasp Dataset, Jacquard数…

政务网中使用内部华为云

项目按甲方要求,部署在政务网,各种需要在系统中播放的视频存放于内部华为云;然后,系统需要在互联网上访问。 经过一天捣鼓,终于搞定。过程中遇到了许多问题,有nginx代理的,docker域名解析的&am…

FTP Entering Extended Passive Mode

目录 原因 两种方法解决,哪个行用哪种 方法一 方法二 原因 FTP的连接建立有两种模式PORT

10个优秀设计网站盘点

从平面广告设计、包装设计和标志设计到游戏特效,都与我们的生活息息相关。过去,设计师依靠一张图纸和一支笔,但进入数字时代后,设计工作从图纸转移到了电脑上。 各种设计网站和在线设计工具相继衍生,简化了工作步骤&a…

Packet Tracer - 配置扩展 ACL - 场景 1

Packet Tracer - 配置扩展 ACL - 场景 1 拓扑图 地址分配表 设备 接口 IP 地址 子网掩码 默认网关 R1 G0/0 172.22.34.65 255.255.255.224 不适用 G0/1 172.22.34.97 255.255.255.240 不适用 G0/2 172.22.34.1 255.255.255.192 不适用 服务器 NIC 172.22.…

戴尔Alienware x15R1 x15R2原厂win11系统带F12 Support Assist OS Recovery恢复功能

戴尔Alienware x15R1 x15R2原厂win11系统带F12 Support Assist OS Recovery恢复功能 恢复各机型预装系统,带所有dell主题壁纸、dell软件驱动、带戴尔SupportAssist OS Recovery恢复功能,一次性恢复成新机状态,并且以后不用重装系统&#xff…

pyinstaller打包Mediapipe时遇到的问题

使用pyinstaller对python文件打包 打包流程 安装pyinstaller pip install pyinstaller打包文件 pyinstaller test.py 打包完成后会生成一个dist文件夹,打包的文件会在里面,找到test.exe。 pyinstaller -F test.py 加上-F会把所有的文件打包成一个exe,也是在dist文件夹下…

Docker File

DockerFile 是用来构建Docker镜像的构建文件,是由一些列命令和参数构成的脚本。 一、DockerFile 一、在home目录下创建docker-test-volume目录 cd /home mkdir docker-test-volume 二、在home目录下的docker-test-volume目录创建dockerfile1文件 vim dockerfile1…

运营-8.内容分发

内容分发本质要解决的问题包含两点: 1.高效的连接人与信息 2.过滤出有价值的信息,让合适的人看到合适的信息。 常见的内容分发方式 1.编辑分发 2.订阅分发 3.社交分发 4.算法分发 TIPS:根据产品性质、技术实力等因素,不同…

长尾学习(一):Long-Tail Learning via Logit Adjustment

一、背景 这是一篇从损失函数入手解决长尾问题的一种新思路,借鉴基于标签频次的logit adjustment方法,鼓励模型在高频类别与低频类别之间的Margin较大,提出了两种校准方法: 事后校准(post-hoc adjustment)…

tiechui_lesson03_缓冲读写与自定义控制

学习了与应用层通过缓冲区方式的交互&#xff0c;包括读写&#xff0c;自定义控制等。小坑比较多&#xff0c;大部分是是头文件和设置上的错误&#xff0c;跟着视频敲想快进就跳过了一些细节。包括&#xff1a; <windef.h> 头文件的引用 //使用DWORD等类型switch语句…

iOS开发多target

场景 背景:设想一下有一个场景,一个业务分为多种身份,他们大部分功能是相同的,但是也有自己的差异性。这种情况,想要构建出不同身份的APP。你会怎么做??? 当然,你可以拷贝一份代码出来,给项目重新命名。这样做的好处是,他们互相不会冲突,不用去关心是否有逻辑的冲…

Python中变量赋值过程的理解

Python中变量赋值过程的理解 在Python中对变量赋值过程的理解&#xff0c;有助于学习者对Python的变量和所指向的对象之间的指向关系深刻理解&#xff0c;避免编程中多个变量赋值后&#xff0c;对变量结果的不确定&#xff0c;减少赋值过程中疑问和困惑。 1.赋值过程基本过程 …

全文检索-Elasticsearch-进阶检索

文章目录 前言一、SearchAPI1.1 URL 后接参数检索1.2 URL 加请求体检索 二、Query DSL2.1 基本语法格式2.2 匹配查询 match2.3 短语匹配 match_phase2.4 多字段匹配 multi_match2.5 复合查询 bool2.6 过滤 filter2.7 查询 term2.8 聚合 aggregations 三、Mapping3.1 待完成3.2 …

Mybatis动态SQL用法

动态SQL是Mybatis的一大重要特性&#xff0c;它可以完成不同条件下的SQL拼接&#xff0c;降低了因为SQL语句书写中的小错误而造成程序报错的概率&#xff0c;例如拼接时要确保不能忘记添加必要的空格&#xff0c;还要注意去掉列表最后一个列名的逗号&#xff0c;利用动态SQL就可…

Vue项目dialog组件数据项清空

目录 一、重置myParams 二、this.$refs["name"].resetFields() 1、使用v-if 然后渲染, 无效 2、使用nextTick, 数据显示慢一拍, 重新打开dialog才会显示上次输入的内容 三、复盘-最终方法 一、重置myParams <el-form:model"myParams":rules&quo…

ssh登录出现Permission denied, please try again可能的解决方案

问题描述 环境&#xff1a;ubuntu 20.04问题描述&#xff1a;在已经设置免密登录后&#xff0c;ssh登录时&#xff08;例如ssh localhost&#xff09;还需要输入密码&#xff0c;并且输入密码后出现下面一系列的报错&#xff1a; xxx(用户名)localhosts password: Permissio…

Makefile教程(入门介绍)

文章目录 前言一、Makefile介绍二、make和Makefile的关系三、编写一个简单的Makefile总结 前言 本篇文章将带大家学习Makefile&#xff0c;Makefile在文件的编译中起到重要作用&#xff0c;在Linux中我们也是经常使用到Makefile&#xff0c;下面我将会带大家学习什么是Makefil…

GNSS定位原理--理解笔记

1、利用“后方交会”原理进行定位。 由已知3个点的坐标以及3个已知点到未知点的距离&#xff0c;就可以计算出未知点的坐标。测量出3个已知点到位置点的距离后&#xff0c;根据三球交会定位&#xff0c;利用方程计算出未知点坐标。 两球交会得到一个圆&#xff0c;三球交会得…