ANS.1的基础总结
ANS.1的基础总结
- 一、ASN.1定义和作用
- 1.1 定义
- 1.2 作用
- 二、ASN.1描述
- 2.1 数据类型
- 2.1.1 标记符类型
- 2.1.2数据类型对应的标记符ID
- 2.1.3 编码类型
- 2.1.3.1 BER的规则TLV
- 2.1.4 CHOICE和ANY类型
- 2.1.4.1 CHOICE
- 2.1.4.1 ANY
- 三、ASN.1与证书
- 3.1 ASN.1、X509v3、证书之间的关系
- 3.2 证书结构
一、ASN.1定义和作用
1.1 定义
ASN.1描述了一种对数据进行表示、编码、传输和解码的数据格式。它提供了一整套正规的格式用于描述对象的结构,而不管语言上如何执行及这些数据的具体指代,也不用去管到底是什么样的应用程序。
1.2 作用
为了解决高级语言中结构化数据在网络传输中的结构关系能送达目的地进行还原,出现了以下几种数据序列化的方法:ASN.1,XML,Json等。
二、ASN.1描述
2.1 数据类型
Integer 、 Bit String 、OCTET String 、Null 、Object Indentifier 、UTF8 String 、Printable String 、UTC time 、Sequence 、 Set 、Choice、ANY等数据类型
除了choice和ANY类型之外的其他数据类型,都有一个标记符。标记符的构成为:
标记符 = 标记符类型 + 标记符ID
2.1.1 标记符类型
类型 | 描述 |
---|---|
Universal | 标准类型 |
Application | 应用相关 |
private | 定义属于特定组织的类型 |
Context-Specify | 上下文的类型,定义特定的结构 |
2.1.2数据类型对应的标记符ID
数据类型 | 标记符ID | 描述 |
---|---|---|
Integer | 0X02 | 全部整数(包含正数和负数) |
REAL | 实数,表示浮点数 | |
ENUMERATED | $1 | 标识符的枚举(实力状态机的状态) |
Bit String | 0X03 | 比特串 |
OCTET String | 0X04 | 字符串 |
Null | 0X05 | 只包含一个值null,用于传送一个报告或者作为choice类型的某些值 |
Object Indentifier | 0X06 | 由注册中心赋予的一个实体的标识符 |
UTF8 String | 0X12 | 各种字符串还有ISO64String等等。。 |
Printable String | 0X13 | |
UTC time | 0X17 | 日期 |
Sequence | 0X30 | 有序集合 |
Set | 0X31 | 无序集合 |
图示:
2.1.3 编码类型
ASN的编码类型有:BER和DER两种类型
BER:是Basic Encoding Rules 的缩写。它定义了一种或者几种方法,将ASN1语法的数据对象转换成二进制字节码。
DER:是Distinguished Encoding Rules的缩写。是唯一的一种方法,将ASN1语法的数据对象转换成二进制字节码。
2.1.3.1 BER的规则TLV
BER传输语法的格式一直是TLV三元组<Type,Length,Value>,也叫做<Tag,Length,Value>。TLV每个域都是一系列八位组,对于组合结构,其中V还可以是TLV三元组。
Type 表示数据类型
Length 表示数据长度
Value 表示数据
== 在上图框内的部分,绿色部分为对象类型ID,蓝色部分为值的长度,黄色部分为值。
如果本结构中还有其他的结构类型,则该值仍为一个三元组组成 ==
2.1.4 CHOICE和ANY类型
2.1.4.1 CHOICE
选择类型。包含一个可供选择的数据类型列表。对于类型能够在事先都知道,可用此类型。
Prize::=CHOICE{
car IA5string,
cash INTEGER,
nothing BOOLEAN }
peter Prize::=TRUE 或者
John Prize::= “ Lincoln ” 或者
Sam Prize::= 25000
2.1.4.1 ANY
如果在定义数据时还不能确定数据类型,可以使用ANY型。ANY型可以被任何ASN.1类型置换。
e.g. TextBook::=SEQUENCE {
author IA5string,
reference ANY}
实例:book1 TextBook ::= {
author "shakespeare ",
reference IA5string " ISBN0669123757 "}
book2 TextBook ::= { author "shakespeare ",
reference INTEGER 1988}
三、ASN.1与证书
3.1 ASN.1、X509v3、证书之间的关系
X509v3定义了证书的结构,里面定义了证书含有哪些信息。
ASN.1定义了证书的语法
X509v3遵循ASN.1语法
类比于ASN.1为java的基础语法和语句。 X509v3为User.java的一个用户模板。这个模板要根据java语法去定义。
3.2 证书结构
Certificate ::= SEQUENCE {tbsCertificate TBSCertificate, -- 证书主体signatureAlgorithm AlgorithmIdentifier, -- 证书签名算法标识signatureValue BIT STRING --证书签名值,是使用signatureAlgorithm部分指定的签名算法对tbsCertificate证书主题部分签名后的值.}
TBSCertificate ::= SEQUENCE {version [0] EXPLICIT Version DEFAULT v1, -- 证书版本号serialNumber CertificateSerialNumber, -- 证书序列号,对同一CA所颁发的证书,序列号唯一标识证书signature AlgorithmIdentifier, --证书签名算法标识issuer Name, --证书发行者名称validity Validity, --证书有效期subject Name, --证书主体名称subjectPublicKeyInfo SubjectPublicKeyInfo,--证书公钥issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL,-- 证书发行者ID(可选),只在证书版本2、3中才有subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL,-- 证书主体ID(可选),只在证书版本2、3中才有extensions [3] EXPLICIT Extensions OPTIONAL-- 证书扩展段(可选),只在证书版本3中才有}
Version ::= INTEGER { v1(0), v2(1), v3(2) }CertificateSerialNumber ::= INTEGER
AlgorithmIdentifier ::= SEQUENCE {algorithm OBJECT IDENTIFIER,parameters ANY DEFINED BY algorithm OPTIONAL }
Parameters:Dss-Parms ::= SEQUENCE { -- parameters ,DSA(DSS)算法时的parameters,
RSA算法没有此参数p INTEGER,q INTEGER,g INTEGER }
SignatureValue:
Dss-Sig-Value ::= SEQUENCE { -- sha1DSA签名算法时,签名值r INTEGER,s INTEGER }Name ::= CHOICE {RDNSequence }RDNSequence ::= SEQUENCE OF RelativeDistinguishedNameRelativeDistinguishedName ::= SET OF AttributeTypeAndValueAttributeTypeAndValue ::= SEQUENCE {type AttributeType,value AttributeValue }AttributeType ::= OBJECT IDENTIFIER
AttributeValue ::= ANY DEFINED BY AttributeTypeValidity ::= SEQUENCE {notBefore Time, -- 证书有效期起始时间notAfter Time -- 证书有效期终止时间 }Time ::= CHOICE {utcTime UTCTime,generalTime GeneralizedTime }UniqueIdentifier ::= BIT STRINGSubjectPublicKeyInfo ::= SEQUENCE {algorithm AlgorithmIdentifier, -- 公钥算法subjectPublicKey BIT STRING -- 公钥值}
SubjectPublicKey:
RSAPublicKey ::= SEQUENCE { -- RSA算法时的公钥值modulus INTEGER, -- npublicExponent INTEGER -- e -- }Extensions ::= SEQUENCE SIZE (1..MAX) OF Extension
Extension ::= SEQUENCE {extnID OBJECT IDENTIFIER,critical BOOLEAN DEFAULT FALSE,extnValue OCTET STRING }
ANS.1的基础总结相关推荐
- UVA1386 【Cellular Automaton】题解
题面:UVA1386 Cellular Automaton 矩阵乘法+快速幂解法: 这是一个比较裸的有点复杂需要优化的矩乘快速幂,所以推荐大家先做一下下列洛谷题目练练手: (会了,差不多就是多倍经验题 ...
- 第八届蓝桥杯第十题 k倍区间
给定一个长度为N的数列,A1, A2, ... AN,如果其中一段连续的子序列Ai, Ai+1, ... Aj(i <= j)之和是K的倍数,我们就称这个区间[i, j]是K倍区间. 你能求出 ...
- 【STUDY】工程数学
目录 第一章 线性空间与线性变换 第二章 内积空间 第三章 jz的标准型 第四章 范数理论 第五章 矩阵函数 [PPT] [] ans | 笔记1 | 基础笔记2 | 知识点+例题 √ | 整理 | ...
- 2018CCPC吉林赛区 hdu6555~hdu6566
2018CCPC吉林赛区(重现赛)- 感谢北华大学 A 基础数论. #include<bits/stdc++.h> using namespace std;typedef long lon ...
- 【学堂在线】C++ 语言程序设计基础 - 课程习题
C++ 语言程序设计基础 - 学堂在线 第1章 绪论 第3章 函数 C3-1 直角三角形 C3-2 斐波那契数列 C3-3 丑数 第4章 类与对象 C4-1 最大公约数 C4-2 反转整数 C4-3 ...
- MATLAB--矩阵操作(1.4)
矩阵的逆 >> A*inv(A) ans = 1.0000 0 -0.0000 -0.0000 1.0000 -0.0000 -0.0000 ...
- python中ans的用法_python cx_Oracle基础使用方法
问题 使用python操作oracle数据库,获取表的某几个字段作为变量值使用. 使用Popen+sqlplus的方法需要对格式进行控制,通过流获取这几个字段值不简洁(个人观点--).(优点是能够使用 ...
- OI基础系列之最大子数组问题
OI基础系列之最大子数组问题 --Edward2414 oi退役了,虽然没取得多少成绩,也算是走过一会的人了.我相信绝大多数oi党都是自学成才,在此,我感谢那些把自己所学写到博客里的前辈们, ...
- 这些Python基础练习题你会几个?
在人工智能大火的当今,Python 作为人工智能时代的首选语言已经越来越收到追捧:但是许多非科班.零基础的小伙伴常常苦于没有合适的入门 Python 的教程而感到苦恼:本人是一名资深Python开发, ...
- 2021牛客寒假算法基础集训营1 J 一群小青蛙呱蹦呱蹦呱
今天的比赛没打( 睡午觉去了,今天太累了 晚上来看看题 2021牛客寒假算法基础集训营1 J 一群小青蛙呱蹦呱蹦呱 题目传送门 板子题( 我们知道由唯一分解定理得,若 n=p1α1×p2α2×p3α3 ...
最新文章
- [HAOI2007] 理想的正方形
- pond and pool
- 花神的数论题(这题...哎。数位dp咋就这么 not naive 呢)
- oracle文件管理
- oracle之控制用户权限和练习
- 作业6--团队项目之需求
- 【计算机网络复习 物理层】2.1.3 码元、波特、速率、带宽
- 暴力枚举——三连击(洛谷 P1618)
- In-Stream Big Data Processing
- 数学分析 导数的四则运算法则及多个函数的推广
- Nginx常见面试题整理---40题
- 从信号与系统,数字信号处理的角度看目前手头研发的蓝牙耳机
- 向数据库中存取图片(BITMAP)
- TI | TM4C123Gx单片机之---ADC笔记
- UNIX环境高级编程学习总结
- Ansys Lumerical | 行波 Mach-Zehnder 调制器仿真分析
- 【WebService】Caused by: org.apache.cxf.transport.http.HTTPException: HTTP respon ...
- 起伏激荡的以太网,抱上这条大腿才能乘风破浪
- ObjectARX程序设计入门
- 获取打印机分辨率_为孩子准备的第一台口袋打印机,喵喵机P2S评测