对RFC系列文档中ASN.1 bitstring 编码取值的解释
来源:互联网 发布:淘宝营销活动 编辑:程序博客网 时间:2024/05/17 00:56
在RFC系列(https://www.ietf.org/rfc.html)文档中,对于数据的封装格式,一般采用ASN.1编码形式描述。这样做的原因在于:ASN.1编码是一种与软硬件无关的数据格式定义方法,具有普适性。在前一篇博文中,介绍过ASN.1对bitstring类型的编码方法,在本文中将举例说明ASN.1 bitstring在RFC文档中的应用。
在RFC5280 《Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile》中的4.2.1.3. Key Usage部分,使用bitstring类型描述密钥用途,如下所示:
KeyUsage ::= BIT STRING {
digitalSignature (0),
nonRepudiation (1), -- recent editions of X.509 have
-- renamed this bit to contentCommitment
keyEncipherment (2),
dataEncipherment (3),
keyAgreement (4),
keyCertSign (5),
cRLSign (6),
encipherOnly (7),
decipherOnly (8) }
比特串中不同位置的比特,如果值为1,表示具有该比特位对应的密钥用途;如果值为0,表示不具备该比特位的密钥用途。在上面的例子中,比特位从0开始计,比特位置与密钥用途的对应关系如下图:
如果一张数字证书的密钥用途是keyCertSign,则应将上图中第5比特位的值设为1,那么此时表示密钥用途的比特串为{0, 0, 0, 0, 0, 1, 0, 0, 0}。由于一般使用DER编码,要求当一个比特串作为编码器的输入时,其最后一个比特必须为1,所以需要去掉最后一个比特1之后的所有比特0,此时密钥用途比特串的值应该表示为:{0, 0, 0, 0, 0, 1}。对这个比特串进行DER编码,得到的编码结果为:0x3 0x2 0x2 0x4,编码过程如下图:
在Windows中查看一张密钥用途为keyCertSign的证书,显示内容如下:
用Asn1View工具查看这张证书的密钥用途部分,显示如下:
同一张数字证书可能会具有多种密钥用途,此时可能会有多个比特位的值为1。比如一张数字证书具有的密钥用途包括以下几种:digitalSignature,nonRepudiation,keyCertSign,cRLSign,使用比特串表示时应写为:{1, 1, 0, 0, 0, 1, 1, 0, 0}。对这个比特串进行编码的过程如下:
在Windows中查看一张密钥用途包括digitalSignature,nonRepudiation,keyCertSign,cRLSign的证书,显示内容如下:
用Asn1View工具查看这张证书的密钥用途部分,显示如下:
- 对RFC系列文档中ASN.1 bitstring 编码取值的解释
- ASN.1规则中Boolean和bitstring编码方式的简介
- ASN.1中OID类型的DER编码
- 对asn.1抽象语法标记中Tag的理解
- BouncyCastle的ASN.1编码功能探究
- ASN.1编码
- ASN.1编码
- ASN.1编码
- ASN.1编码
- asn.1编码学习
- ASN.1编码
- ASN.1编码举例
- ASN.1中OID类型的DER编码(附Perl,java源码)
- ASN.1编码方式研究
- DER编码和ASN.1
- ASN.1编码学习笔记
- 【ASN.1】BER编码规则
- ASN.1编码学习笔记
- 神经网络
- enum是神马
- LA 3485
- HDU
- Ubuntu16.04安装中文输入法
- 对RFC系列文档中ASN.1 bitstring 编码取值的解释
- Bagging与随机森林
- 第三章:3.7 傅里叶变换性质(二)
- BZOJ 2179 FFT快速傅立叶(FFT)
- Python实用黑科技——找出最大/最小的n个元素
- 2017可赚钱的共享影院安卓APP源码分享
- stm32 TFTLCD驱动原理(二)
- springMVC和MyBatis项目中的bug总结
- if(argc == 2 && (pimg = cvloadimage(argv[1],1)) != 0)解析