• 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

  • 相关阅读:
    常见ETL工具一览
    php语言查询Mysql数据库内容
    修改博客园模板样式
    《将博客搬至CSDN》
    使用 Git 和 GitHub 托管项目源码
    Delphi webbrowser 的一些方法
    Delphi 实现 图灵机器人API(IDHTTP POST )
    Delphi 中调用JS文件中的方法
    HTTP 常见异常状态及Delphi IDHTTP 控件处理方式
    Delphi Cookie获取及使用
  • 原文地址:https://www.cnblogs.com/lizhigang/p/15123913.html
Copyright © 2020-2023  润新知