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

    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

  • 相关阅读:
    输出由“*”组成的菱形
    一个简单的计算器(c++)
    输入学号,显示对应的姓名(c++)
    使用 Puppet 在 Windows Azure 中配备 Linux 和 Windows 环境
    微软开放技术发布针对 Mac 和 Linux 的更新版 Azure Node.JS SDK 和命令行工具
    微软开放技术开发了适用于 Windows Azure 移动服务的开源 Android SDK
    微软开放技术发布开源 Jenkins 插件以将 Windows Azure Blob 服务用的开作存储库
    VM Depot 登陆中国!
    VM Depot 喜迎中国本土开源镜像!
    VM Depot 助您使用本地开源软件架设开发 Web 站点
  • 原文地址:https://www.cnblogs.com/utank/p/12035886.html
Copyright © 2011-2022 走看看