一级a性色生活片久久毛片_国产一级a毛一级a看免费视频_特级丰满少妇一级AAAA爱毛片_国产精品高潮呻吟久久av无码午夜鲁丝片_国产suv精品一区二区6_少妇一级婬片免费放真人一级毛片_久久久久国产一区二区三区_寡妇高潮一级毛片91免费看`日韩一区二区

歡迎您訪問(wèn)鄭州興邦電子股份有限公司官方網(wǎng)站!
阿里巴巴誠(chéng)信通企業(yè)
全國(guó)咨詢熱線:40000-63966
興邦電子,中國(guó)水控機(jī)第一品牌

聯(lián)系興邦電子

全國(guó)咨詢熱線:40000-63966

售后:0371-55132951/55132952

工廠:河南省 鄭州市 高新區(qū)蓮花街電子電器產(chǎn)業(yè)園

PBOC/EMV之TLV編碼與解碼

文章出處:http://www.hungpor.com 作者: 人氣: 發(fā)表時(shí)間:2012年03月15日

[文章內(nèi)容簡(jiǎn)介]:幾乎所有的需要在卡片和終端之間傳送的數(shù)據(jù)都是TLV格式的.PBOC文檔里并沒(méi)有對(duì)TLV編碼細(xì)節(jié)做具體說(shuō)明,而EMV的手冊(cè)里雖有敘述,但并不詳細(xì).我下面就要很詳細(xì)的分析TLV的編碼格式并給出相應(yīng)的TLV解碼的偽代碼.

    幾乎所有的需要在卡片和終端之間傳送的數(shù)據(jù)都是TLV格式的. PBOC文檔里并沒(méi)有對(duì)TLV編碼細(xì)節(jié)做具體說(shuō)明, 而EMV的手冊(cè)里雖有敘述,但并不詳細(xì). 我下面就要很詳細(xì)的分析TLV的編碼格式并給出相應(yīng)的TLV解碼的偽代碼.

    TLV是tag, length和value的縮寫.一個(gè)基本的數(shù)據(jù)元就包括上面三個(gè)域. Tag唯一標(biāo)識(shí)該數(shù)據(jù)元, length是value域的長(zhǎng)度. Value就是數(shù)據(jù)本身了. 舉個(gè)例子, 下面是一個(gè)tlv格式的AID(應(yīng)用標(biāo)識(shí)符)字節(jié)串”9F0607A0000000031010”, 其中9F06是tag, 07是長(zhǎng)度, A0000000031010就是AID本身的值了.

    對(duì)于程序編寫人員來(lái)說(shuō),我們關(guān)心的是,如果有類似上面這樣的一串TLV編碼的字節(jié)串從卡片傳過(guò)來(lái), 怎么樣從中提取我們想要的數(shù)據(jù). 這就牽扯出TLV解碼的問(wèn)題了.

    其中BER-TLV編碼是ISO定義一種規(guī)范, 然后到了PBOC/EMV里被簡(jiǎn)化了, 哪里被簡(jiǎn)化了呢?舉一個(gè)例子, tag域在ISO里可以有多個(gè)字節(jié), 而PBOC/EMV里規(guī)定只用前兩個(gè)字節(jié). 我下面要講的TLV解碼就是基于PBOC/EMV的簡(jiǎn)化版本.

    首先看一下tag域是怎樣編碼的. Tag域占最多占兩個(gè)字節(jié). 編碼規(guī)則如下面兩幅圖


    解釋一下這兩幅圖. 第一個(gè)圖是第一個(gè)字節(jié)的編碼規(guī)則. b8和b7兩位標(biāo)識(shí)tag所屬類別. 這個(gè)可以暫時(shí)不用理. b6決定當(dāng)前的TLV數(shù)據(jù)是一個(gè)單一的數(shù)據(jù)和復(fù)合結(jié)構(gòu)的數(shù)據(jù). 復(fù)合的TLV是指value域里也包含一個(gè)或多個(gè)TLV, 類似嵌套的編碼格式. b5~b1如果全為1,則說(shuō)明這個(gè)tag下面還有一個(gè)子字節(jié). 占兩個(gè)字節(jié), 否則tag占一個(gè)字節(jié).

    第二幅圖是說(shuō)明如果tag占用兩個(gè)字節(jié), 第二個(gè)字節(jié)的編碼格式. B8決定tag是否還有后緒的字節(jié)存在,因?yàn)榍懊嬲f(shuō)過(guò),PBOC/EMV里的tag最多占兩個(gè)字節(jié), 所以該位保持為0.

    清楚了上面tag編碼格式,可很容易寫出tag域解碼的代碼了. 假設(shè),終端接收到一人字節(jié)串,這個(gè)字節(jié)串保存在tlvData的字節(jié)數(shù)組里, 偽代碼如下:

    if ( (tlvData[i]&0x20) != 0x20)//單一結(jié)構(gòu)

       {

              if ( (tlvData[i]&0x1f) == 0x1f)//tag兩字節(jié)

              {

                     tagIndex++;

                    

                     //解析length域

                     //解析value域

              }

              else//tag單字節(jié)

              {

                     //解析length域

                     //解析value域

              }

       }

       else//復(fù)合結(jié)構(gòu)

       {

              //復(fù)合結(jié)構(gòu)可以考慮用遞歸的方法來(lái)實(shí)現(xiàn).

       }

    Length域的編碼比較簡(jiǎn)單,最多有四個(gè)字節(jié), 如果第一個(gè)字節(jié)的最高位b8為0, b7~b1的值就是value域的長(zhǎng)度. 如果b8為1, b7~b1的值指示了下面有幾個(gè)子字節(jié). 下面子字節(jié)的值就是value域的長(zhǎng)度.

    Value域的編碼格式要根據(jù)具體的value所表示的數(shù)據(jù)元決定. 比如AID是由RID+PIX構(gòu)成等. 這個(gè)不詳述. 有了上面的知識(shí),基本上可以寫一個(gè)TLV解碼器出來(lái)了.

本文關(guān)鍵詞:PBOC,EMV,TLV編碼,編碼,TLV
回到頂部
吉隆县| 行唐县| 保定市| 屏边| 涡阳县| 五寨县| 玉山县| 武宁县| 莱芜市| 桃园县| 根河市| 利津县| 尼木县| 房山区| 禄丰县| 云浮市| 墨竹工卡县| 九寨沟县| 龙胜| 铜梁县| 通许县| 陕西省| 什邡市| 紫阳县| 九寨沟县| 迭部县| 长岛县| 临邑县| 建宁县| 宜宾市| 永定县| 恭城| 应城市| 云浮市| 大庆市| 东丽区| 商洛市| 南康市| 衢州市| 永嘉县| 科技|