zoukankan      html  css  js  c++  java
  • EBR-TLV数据格式

    原文:https://www.cnblogs.com/utank/p/12035886.html

    EMV规范中的BER-TLV数据格式:BER-TLV结构由Tag、Length、Value三部分组成。

    【TAG域】
    TAG可以由1个与多个字节组成,TAG域的第一个字节编码格式如下:

    其中由三部分组成,高两位表示Tag类别,低五位表示Tag 编号,第6位表示Tag类型。
    Tag类别:
    00:通用类
    01:应用类
    02:上下文相关类
    03:专用类
    在智能卡中见得较多的是应用类与上下文相关类,通用类与行业无关,好像只有一个(0x06:Object Identifier);应用类就很多了,如前文中的0x6F,还有经常碰到的0x4F表示AID(应用标识符),在7816中定义,在其它很多的应用中就遵循了,如EMV,PBOC,GP等。
    0x6F: '0110 1111'
    0x4F: '0100 1111'
    上下文类在特定的使用环境中意义不一样,具体可以参考相应的规范定义。专用类一般在私有的定义中出现,例如一些卡商在卡片的预个人化命令中使用。

    Tag类型:
    Tag的类型由第6位表示,
    0:表示简单类型
    1:表示结构类型

    可以用一个比喻来理解两种类型的区别,简单类型相当于树形结构中的叶子节点,结构类型相当于枝干。

    简单举两个例子,下面两个都是符合TLV编码的数据流:
    70069F3803010203
    9F3803010203
    可以看到,70 TAG的值(value)域也是由TLV结构组成的。
    而9F38 TAG的值域则是由简单数据构成(010203)不需要符合TLV结构编码。
    基于这个原则,TLV可以设计成多层嵌套的关系。

    Tag编号:
    Tag编号要根据Tag的长度来确定,对于一个字节的Tag,能表示的编号为2^5为32,但全为1的时候表示有后续字节,因此一个字节的tag只能表示31个编号,大于31的只能由第多个字节表示。其后续字节格式:

    实际应用中,Tag编号很少单独拿来使用;

    【LEN域】
    BER-TLV中的长度表示Value域中的数据长度,由1到多个字节组成。
    如果首字节的最高位为0,则低7位表示长度,数据长度最大值为127。
    如果首字节的最高位为1,则表明Value域中的数据长度超过127,其低7位表示后续LEN域的字节数,如下所示:

    【VAL域】

    值由一个或多个字节组成,根据Tag中的类型不同,有简单类型及结构类型两种表示方法。


    参考引用:

    https://www.cnblogs.com/highkgao/p/3968086.html

    https://www.cnblogs.com/SCPlatform/p/5076935.html

  • 相关阅读:
    java 事件监听机制组成
    关于父进程和子进程的关系(UAC 绕过思路)
    Fort.js – 时尚、现代的进度提示效果
    Hive学习之函数DDL和Show、Describe语句
    js完美的div拖拽实例代码
    SSH2框架实现注冊发短信验证码实例
    再看C#中的托付和事件
    RGB(FFFFFF)转255:255:255
    单一目的聚集操作
    智慧城市,在中国的北海边再画一个圈——大连“中国首届智慧城市协同创新峰会”请你带好笔
  • 原文地址:https://www.cnblogs.com/lizhigang/p/15123913.html
Copyright © 2011-2022 走看看