tlv
格式及編碼
幾乎所有的需要在卡片和終端之間傳送的資料都是
tlv格式的
. pboc
文件裡並沒有對
tlv編碼細節做具體說明
而emv
的手冊裡雖有敘述,
但並不詳細
***就要很詳細的分
析tlv
的編碼格式並給出相應的
tlv解碼的偽**
tlv是
tag,
length
和value
的縮寫乙個基本的資料元就包括上面三個域
tag唯一標
識該資料元
, length
是value
域的長度
. value
就是資料本身了
舉個例子
下面是乙個
tlv格式的
aid(應用識別符號)位元組串」
9f0607a0000000031010
其中9f06
是tag, 07
是長度, a0000000031010
就是aid
本身的值了
對於程式編寫人員來說,
我們關心的是,
如果有類似上面這樣的一串
tlv編碼的位元組串
從卡片傳過來
怎麼樣從中提取我們想要的資料
這就牽扯出
tlv解碼的問題了
其中ber-tlv
編碼是iso
定義一種規範
然後到了
pboc/emv
裡被簡化了
**被簡化
了呢舉乙個例子
, tag
域在iso
裡可以有多個位元組
而pboc/emv
裡規定只用前兩個位元組
***要講的
tlv解碼就是基於
pboc/emv
的簡化版本
首先看一下
tag域是怎樣編碼的
. tag
域佔最多佔兩個位元組
編碼規則如下面兩幅圖:
圖1>
圖1>
解釋一下這兩幅圖
第乙個圖是第乙個位元組的編碼規則
. b8和b7
兩位標識
tag所屬
類別這個可以暫時不用理
. b6
決定當前的
tlv資料是乙個單一的資料和復合結構的數
據復合的
tlv是指
value
域裡也包含乙個或多個
tlv,
類似巢狀的編碼格式
b5~b1
如果全為
,則說明這個
tag下面還有乙個子位元組
佔兩個位元組
否則tag
佔乙個位元組
第二幅圖是說明如果
tag占用兩個位元組
第二個位元組的編碼格式
b8決定
tag是否還
有後緒的位元組存在,因為前面說過,
pboc/emv
裡的tag
最多佔兩個位元組
所以該位保持為
0.清楚了上面
tag編碼格式
可很容易寫出
tag域解碼的**了
假設,終端接收到一人
位元組串,這個位元組串儲存在
tlvdata
的位元組陣列裡
偽**如下
TLV格式及編碼
幾乎所有的需要在卡片和終端之間傳送的資料都是tlv格式的.pboc文件裡並沒有對tlv編碼細節做具體說明,而emv的手冊裡雖有敘述,但並不詳細.我下面就要很詳細的分析tlv的編碼格式並給出相應的tlv解碼的偽 tlv是tag,length和value的縮寫.乙個基本的資料元就包括上面三個域.tag唯...
TLV格式及編碼
幾乎所有的需要在卡片和終端之間傳送的資料都是tlv格式的.tlv是tag,length和value的縮寫.乙個基本的資料元就包括上面三個域.tag唯一標識該資料元,length是value域的長度.value就是資料本身了.舉個例子,下面是乙個tlv格式的aid 應用識別符號 位元組串 9f0607...
TLV 格式及編譯碼示例
tlv是一種可變格式,意思就是 type型別,lenght長度,value值 type和length的長度固定,一般那是2 4個位元組 這裡統一採用4個位元組 value的長度有length指定 編碼方法 1.將型別type用htonl轉換為網路位元組順序,指標偏移 4 2.將長度length用ht...