<strike id="tpvd9"><dfn id="tpvd9"></dfn></strike>

        <em id="tpvd9"></em>

          <address id="tpvd9"></address>
            <dfn id="tpvd9"><sub id="tpvd9"></sub></dfn>

            <thead id="tpvd9"><noframes id="tpvd9">
            <ruby id="tpvd9"></ruby>

                  <thead id="tpvd9"></thead>
                  歡迎您訪(fǎng)問(wèn)鄭州興邦電子股份有限公司官方網(wǎng)站!
                  阿里巴巴誠信通企業(yè)
                  全國咨詢(xún)熱線(xiàn):40000-63966
                  興邦電子,中國水控機第一品牌

                  聯(lián)系興邦電子

                  全國咨詢(xún)熱線(xiàn):40000-63966

                  售后:0371-55132951/55132952

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

                  PBOC/EMV之TLV編碼與解碼

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

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

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

                      TLV是tag, length和value的縮寫(xiě).一個(gè)基本的數據元就包括上面三個(gè)域. Tag唯一標識該數據元, length是value域的長(cháng)度. Value就是數據本身了. 舉個(gè)例子, 下面是一個(gè)tlv格式的AID(應用標識符)字節串”9F0607A0000000031010”, 其中9F06是tag, 07是長(cháng)度, A0000000031010就是AID本身的值了.

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

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

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


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

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

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

                      if ( (tlvData[i]&0x20) != 0x20)//單一結構

                         {

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

                                {

                                       tagIndex++;

                                      

                                       //解析length域

                                       //解析value域

                                }

                                else//tag單字節

                                {

                                       //解析length域

                                       //解析value域

                                }

                         }

                         else//復合結構

                         {

                                //復合結構可以考慮用遞歸的方法來(lái)實(shí)現.

                         }

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

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

                  本文關(guān)鍵詞:PBOC,EMV,TLV編碼,編碼,TLV
                  回到頂部
                  99久热只有精品视频在线17_精品一区二区三区自拍图片_最新国产v亚洲_久久综合九色综合久
                  <strike id="tpvd9"><dfn id="tpvd9"></dfn></strike>

                        <em id="tpvd9"></em>

                          <address id="tpvd9"></address>
                            <dfn id="tpvd9"><sub id="tpvd9"></sub></dfn>

                            <thead id="tpvd9"><noframes id="tpvd9">
                            <ruby id="tpvd9"></ruby>

                                  <thead id="tpvd9"></thead>