[英]Parsing PDOL for GET PROCESSING OPTIONS command in EMV transaction
我正在嘗試構建一個格式正確的GET PROCESSING OPTIONS命令,以發送到非接觸式EMV卡。 這篇文章非常有用,但我只需要了解更多細節。
在解析PDOL時,可以安全地假設每個標記的長度為2個字節,然后是預期的數據大小嗎?
例如,PDOL 9F66049F02069F37049F1A02
分為9F66 04
9F02 06
等,每個都有2個字節的標簽,1個字節用於預期的數據長度。
在解析時假設每個標記的長度是2個字節是否安全?
不,你不能指望每個標簽都包含兩個字節(盡管大多數標簽都有)。 EMV中的標簽長度值(TLV)結構遵循ASN.1編碼規則(基本編碼規則,BER)。 有關詳細信息,請參閱以下文檔:
后者是一個非常好的介紹,幫助我入門。
TLV結構(數據對象)由標記值,長度值和數據有效負載(值)組成:
+-----------+-----------+-----------+ | Tag | Length | Value | | (N Bytes) | (M Bytes) | (L bytes) | +-----------+-----------+-----------+
PDOL(以及任何其他數據對象列表,DOL)包含標記和一個或多個此類數據對象的長度部分。 類似地,PDOL相關數據包含PDOL中引用的DO的值部分。 標簽和長度部分都可以包含一個或多個字節。
對於標記部分,規則與此類似(有關詳細信息,請參閱上述參考):
tag[0] & 0x01F == 0x01F
),則標記至少包含兩個字節。 tag[i] & 0x080 == 0x080
),則標記由另外一個字節組成。 對於每個后續字節重復此操作。 對於長度部分,規則大約是這樣的(有關更多詳細信息,請參閱上面的參考資料):
length[0] & 0x080 == 0
),則剩余的7位編碼長度值( length[0] & 0x07F
)。 length[0] & 0x080 == 0x080
),則剩余的7位編碼長度部分的剩余字節數( length[0] & 0x07F
)。 其余字節表示長度值為無符號整數,MSB優先。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.