简单TLV仅由标签(或类型),长度和值组成。
我在文档中发现他们指的是SIMPLE-TLV和BER-TLV。我查看了大多数EMV和GP文档,但他们没有提到它们的不同。
有人可以帮助我了解两者的区别吗?
这是ISO / IEC 7816-4使用的更常见的BER encoding的规范:
每个BER-TLV数据对象应包含2个或3个连续字段(请参阅ISO / IEC 8825和附件D)。
标签字段T由一个或多个连续字节组成。它编码一个类,一个类型和一个数字。长度字段包含一个或多个连续字节。它编码一个整数L。如果L不为null,则值字段V由L个连续字节组成。如果L为null,则数据对象为空:没有值字段。
注意,ISO / IEC 7816在当前标准中最多只能使用5个长度的字节(指定最大2 ^ 32-1字节的大小)。也不支持不定长度编码。这些限制特定于智能卡。请注意,在更高版本的ISO / IEC 7816-4中引入了4和5字节长度的编码。较早的卡/卡读取应用程序可能仅支持3个长度的字节(即,值大小最大为64KiB字节,而不是4GiB)。
BER TLV规范更加广泛(这就是为什么SIMPLE-TLV被称为“简单”)的原因。由于互联网上有大量可用信息,因此我不会过多地讨论细节。仅举几个区别,标签具有语法含义,可能包含多个字节,并且长度编码相当复杂。
通常,BER应该仅用作ASN.1结构的编码,而ASN.1语法定义了该结构。 ISO 7816-4却搞砸了,仅直接指定BER标签字节。
注意,有时指定了DER而不是BER。在这种情况下,您应该只使用最小字节数作为长度字段的大小-例如在以下示例中,单个字节长度为05
。 BER编码的ISO / IEC规范基本上是美国特定的X.690标准的副本,也反映在国际标准ISO / IEC 8825-1(均为付费软件)中。
ISO / IEC 7816-4中的BER规范后面是SIMPLE-TLV规范。 SIMPLE-TLV特定于ISO 7816-4。
每个SIMPLE-TLV数据对象应包含2个或3个连续的字段。
标签字段T由单个字节组成,仅对来自1到254(例如记录标识符)。它没有分类也没有编码建筑类型。长度字段包含1或3个连续的字节。如果length字段的前导字节在以下范围内从“ 00”到“ FE”,则长度字段由单字节编码组成一个从0到254的整数L。如果前导字节等于'FF',然后长度字段在随后的两个字节上继续编码从0到65535的整数L。如果L in不如果为null,则值字段V由连续的字节组成。如果L是null,则数据对象为空:没有值字段。
请注意,标准忘记直接指定字节序。但是,您可以在ISO / IEC 7816-4中采用大端编码。
以下示例均用于传达相同的标签号(定义字段)和值,除了为BER定义标签号31的示例。>
Sample SIMPLE-TLV
0F 05 48656C6C6F // tag number 15, length 5 then the value 0F FF0005 48656C6C6F // tag number 15, length 5 (two bytes), then the value
样本BER-TLV:
4F 05 48656C6C6F // *application specific*, primitive encoding of tag number 15, length 5 then the value 4F 8105 48656C6C6F // the same, using two bytes to encode the length 4F 820005 48656C6C6F // the same, using three bytes to encode the length 4F 83000005 48656C6C6F // the same, using four bytes to encode the length 4F 8400000005 48656C6C6F // the same , using five bytes to encode the length 5F0F 05 48656C6C6F // **invalid** encoding of the same, with two bytes for the tag, specifiying a tag number 15 which is smaller than 31 5F1F 05 48656C6C6F // application specific, primitive encoding of **tag number 31**
在具有两个字节标记编码的最后一个示例中,第一个字节为40十六进制,其中最左边的前3位010指定特定于应用程序的编码,在其上加上魔术值1F(31)表示后面将跟随另一个字节实际标签号,再次为1F,因此值为31。
应注意以下差异:
简单TLV仅由标签(或类型),长度和值组成。
BER-TLV是一种特殊的TLV,其值中包含一个或多个TLV。因此它具有复合结构。
Tag1 Len1 Tag2-Len2-Value2 Tag3-Len3-Value3 ... TagN-LenN-ValueN
------------------------Value1------------------------
简单TLV仅由标签(或类型),长度和值组成。