我试图了解IMPLICIT和EXPLICIT标签实际上是如何以DER二进制格式编码的。
基本示例很清楚。纯整数
x INTEGER ::= 5
被编码为TLV三元组02 01 05
。在
x [2] IMPLICIT INTEGER ::= 5
隐式标签82
替换现有标签02
并形成另一个TLV:82 01 05
,并在
x [3] EXPLICIT INTEGER ::= 5
在原始TLV:A3 03 02 01 05
周围添加了包装器。
现在我正在研究一个更复杂的案例
30 42 A1 40 30 0D 82 0B 77 77 77 2E 62 61 64 2E
6F 72 67 30 09 82 07 62 61 64 2E 63 6F 6D 30 0D
81 0B 62 61 64 40 62 61 64 2E 6F 72 67 30 09 81
07 62 61 64 2E 63 6F 6D 30 0A 87 08 0A 00 00 00
FF 00 00 00
被解码为
SEQUENCE {
[1] {
SEQUENCE {
[2] www.bad.org
}
SEQUENCE {
[2] bad.com
}
SEQUENCE {
[1] bad@bad.org
}
SEQUENCE {
[1] bad.com
}
SEQUENCE {
[7] 0A000000FF000000
}
}
}
我的问题是,如何知道A1
是隐式标签[1] IMPLICIT SEQUENCE
,它取代了原始标签10
,并包含五个TLV元素(序列),还是一个包含这五个元素的显式标签?什么是A1
?
显式标签可以包装几个TLV元素吗?
“已构造”标志(第6位)指示标记是显式的还是隐式的,是否正确?还是我需要查看包装纸的长度和被包装的东西?
我不认为二进制数据是正确的,因此另一种可能性是A1 40
环绕以下序列30 0D ...
,长度不匹配并且必须拒绝数据。