ASN.1 编码

X.690标准:

https://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf

TLV之TAG解读:

tag-length-value表示中,tag的编码规则如下:

 

 

 

 

TAG<=30

当TAG值小于或者等于30时,用一个字节来编码TAG即可。其中,前面的3位有特殊含义,后面的5位代表TAG值,后5位全1要排除在外(11111是为TAG值>30的编码准备的)

TAG>30

当TAG值大于30时,需要用多个字节来表示:leading octet + one or more subsequent octets

其中leading octet有固定的格式含义,前面两位表示Class,第三位为P/C类型,后面5位固定为11111。

也就是说,根据TAG的类型,变更class + P/C表示即可。

而one or more subsequent octets则是根据TAG具体的值,来决定需要有多少个字节来表示。

one or more subsequent octets的每个字节(最后一个字节除外)的第一位都需要固定为1,最后一个字节的第一位固定为0。

也就是剔除one or more subsequent octets各个字节的最高位,剩下的二进制拼接出来的值和TAG相同即可。

例子:

输入数据:

3082017902010004820100934bf94e2aa28a3f83c9f79297250262fbe3276b5a1c91159bbfa3ef8957aac84b59b30b455a79c2973480823d8b3863c3deef4a8e243590268d80e18751a0e130f67ce6a1ace9f79b95e097474febc981195b1d13a69086c0863f66a7b7fdb48792227b1ac5e2489febdf087ab5486483033a6f001ca5d1ec1e27f5c30f4cec2642074a39ae68aee552e196627a8e3d867e67a8c01b11e75f13cca0a97ab668b50cda07a8ecb7cd8e3dd7009c9636534f6f239cffe1fc8daa466f78b676c7119efb96bce4e69ca2a25d0b34ed9c3ff999b801597d5220e307eaa5bee507fb94d1fa69f9e519b2de315bac92c36f2ea1fa1df4478c0ddedeae8c70e0233cd098040cd796b02c370f1fa4cc0124f1302e0201033029a1083106020100020101a203020120a30402020100a4053103020101a6053103020140bf83770205000420ccd540855f833a5e1480bfd2d36faf3aeee15df5beabe2691bc82dde2a7aa910041064c9f689c60ff6223ab6e6999e0eb6e5

辅助工具:

http://lapo.it/asn1js/

数据解析:

 

由该图可知,TAG=503最终编码为BF 83 77 ,对应二进制为:1011 1111 1000 0011 0111 0111‬

TAG=503的编码过程:

头一个字节,确定好Class和P/C值即可。

Class,按照标准,编码为1 0

 

P/C,按照标准,编码为1

 

剩下的5位,编码为全1,所以leading octet编码为1011 1111 = 0xBF

接下来编码TAG=503这个值。

503对应的二进制为:1 1111 0111‬‬,按标准,从最低位开始以7位隔开为11 111 0111‬。非末位字节的最高位填充1,末位字节最高位填充为0,所以最终编码为:

1000 0011 0111 0111 = 0x8377

两者组合起来,TAG最终编码为:1011 1111 1000 0011 0111 0111 = 0xBF8377

http://lapo.it/asn1js/ 中解析得到的结果一致。

参考文章:

https://blog.csdn.net/q1009020096/article/details/86619059

https://www.cnblogs.com/jacklikedogs/articles/3699625.html

http://threelambda.com/2020/11/08/asn-1/

https://learn.microsoft.com/zh-tw/windows/win32/seccertenroll/about-encoded-tag-bytes

https://www.mingfer.cn/2019/04/05/ASN1%E6%8A%BD%E8%B1%A1%E8%AF%AD%E6%B3%95/

 

posted @ 2023-03-14 16:55  xiululu  阅读(461)  评论(0编辑  收藏  举报