ASN.1编码

    1. 了解ASN.1编码

ASN是Abstract Syntax Notation的缩写,ASN.1(抽象语法标记版本1)是一种能自解析的数据的编码格式,只要是标准的ASN.1格式的文件都可以把其中的数据解析出来(用二进制表示),如果,再结合数据的各个字段的编码方法,就可以把其内容解析为可读信息。

能自解析是因为它使用的一种TLV的数据表示方法。TLV是3个单词的首字母:Tag、Length、Value,即标识符、长度、值。

  1. T:标识符,在整个数据文件的标识符命名空间中唯一,它可以是整个文件的标识,也可以是记录的标识,也可以是字段的标识。
  2. L:长度,即这种标识符表示的数据内容有多少个字节。这里的长度指的是字节数,这个字节数不包括tag和length本身的字节数。
  3. V:即这种标识符的数据内容,其长度就是L表示的字节数。

从整个数据文件的第一个字节开始,就是用这种TLV方法来表示的,因此,我们从一个TLV就可以知道整个文件的长度(字节数),也可以知道某条记录的长度,某个字段的长度和内容等等。

      1. 编码格式

我们可以借用一些工具来查看ASN.1文件的内容,便于核对我们的配置是否正确,这里使用:windows下面的Asn1Viewer 1.2.exe工具来说明。

 

        1. Tag的编码

下图就是截取的一些TLV组,对这些TLV组中的tag进行解释说明:

Tag可以是一个单字节的标识,也可以是一个多字节的标识,它们的编码规则是这样的:

  1. 如果tag的第一个字节的后5位不是0x1F,则这个tag就只有一个字节,就是它本身,如下图中的tag只有一个字节的情况中,tag就是0x50
  2. 如果tag的第一个字节的后5位是0x1F,并且下一个字节的最高位不是1,则,这个tag有2个字节,就是第一个字节和其后的那个字节,如下图的tag有2个字节的情况在,tag就是0x5F69。
  3. 如果tag的第一个字节的后5位是0x1F,并且下一个字节的最高位是1,则这个tag有多个字节,就是第一个字节之后,所有的最高位是1的那些字节,再加上最后一个最高位是1的那个字节之后的一个字节。如下图中的tag多于2个字节的情况之,tag就是0x5F811F。

 

 

        1. Length的编码

用下图来说明长度的编码方法:

  1. 如果长度的第一个字节的最高位不是1,则长度只有一个字节,就是它本身。如下图的长度只有一个字节的情况之,长度是0x01。
  2. 如果长度的第一个字节的最高位是1,则长度有多个字节组成,字节的总数等于这个字节去掉最高位之后,剩余的7位所表示的数值的大小。如下图中的长度是多字节的情况中,长度是:0x82 01 35。这里长度的第一个字节是0x82,表明这个长度有多个字节组成,字节的总数等于0x02(去掉最高位1之后)表示的数值的大小,等于2,所以是2个字节,即长度是其后的2个字节:0x0135,等于十进制的309个字节。

​​​​​​​

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值