ASN.1和PKCS#7知识点总结
ASN.1是ISO/ITU-T标准,描述了一种对数据进行表示、编码、传输和解码的数据格式。它提供了一整套正规的格式用于描述对象的结构,而不管语言上如何执行这些数据的具体指代,也不用去管是什么样的应用程序。
**ASN.1的应用场景**
ASN.1独立于机器,独立于程序语言,独立于应用程序的内部表示。应用于定义任何数字信息,包括音频、视频、图片、数据等。它可以解决以下3个场景:
1. 程序语言之间的数据类型不同
2. 不同机器平台之间数据的存储方式不同
3. 不同种类的计算机内部数据表示不同
**ASN.1基本语法规则**
在ASN.1中,符号的定义没有先后次序:只要能够找到该符号的定义即可,而不必关心在使用它之前是否被定义过。
* 所有的标识符、参考、关键字都要以一个字母开头,后接字母(大、小写都可以)、数字或者连字符“-”。不能出现下划线“_”。不能以连字符“-”结尾,不能出现两个连字符(注释格式)。
* 关键字一般都是全部大写的,除了一些字符串类型(如PrintableString,UTF8String,等。因为这些都是由原类型OCTETSTRING衍生出来的)。
* 在标识符中,只有类型和模块名字是以大写字母开头的,其它标识符都是以小写字母开头的。
* 带小数点的小数形式不能在ASN.1中直接使用,在ASN.1中实数实际定义为三个整数:尾数、基数和指数
* 注释以两个连字符“--”开始,结束于行的结尾或者该行中另一个双连字符。
* 如同大多数计算机语言,ASN.1不对空格、制表符、换行符和注释做翻译。但是在定义符号(或者分配符号Assignment)“::=”中不能有分隔符,否则不能正确处理。
**ASN.1类型定义**
ASN.1类型定义的格式为:<新类型的名字>::=<类型描述>
其中:<新类型的名字>是一个以大写字母开头的标识符:<类型描述>是基于内建类型或在其它地方定义的类型。
**ASN.1值定义**
ASN.1值定义的格式为:<新的值的名字><该值的类型>::=<值描述>
其中:<新的值的名字>是以小写字母开头的标识符:<该值的类型>可以是一个类型的名字,也可以是类型描述:<值描述>是基于整数的值。
**PKCS#7**
PKCS#7是一种基于ASN.1的数字签名格式,用于数字证书和加密数据的签名验证。它提供了一种安全的方式来保护数据的完整性和身份验证。
**DER抽象语法**
DER(Distinguished Encoding Rules)是一种ASN.1的编码规则,用于将ASN.1数据转换为二进制格式。DER编码规则定义了一种确定的方式来将ASN.1数据编码为二进制数据。