簡體   English   中英

如何解析 3 字節長度的 BER-TLV 標簽

[英]how to parse 3 byte length BER-TLV TAG

我正在使用一些 EMV 標簽,其中大多數標簽的長度為12個字節,例如9F02, 81,..我知道有一個特定的位配置來知道我如何確定標簽長度以確定標簽是 2 字節長度或更大,我使用:

unsigned char tags[]={0x9F,0x02};
if((tags[0]&0x1F)==0x1F){
  ...
}

但是當我有一些比這更大的標簽時我不知道該怎么做。

我正在使用 EMV 數據,我正在使用認證卡進行測試,我收到的these tags are: DF8111, DF8119, DF811E, DF812C它們與 CVM 相關。

仔細閱讀EMV 4.3 Book 3 ,Annex B - Rules for BER-TLV Data Objects section B1, B2, B3 如果您嚴格遵循這一點,那么您就不需要存儲靜態標簽列表; 它清楚地說明了如何編碼和解釋標簽長度和值。

根據

EMV 4.3 第 3 冊

, 附件 B -上面鏈接的BER-TLV數據對象部分B1B2 的規則,您應該檢查當前字節中的第 8 位,以了解標簽中是否有更多字節,假設您使用的是 c/c++ (當你在這篇文章中標記它)這里是一個可以用來檢查條件的代碼,我在下面評論了條件所在的代碼,你可以使用它。

        int start = 0;
        int end = start + len;
        while (start < end) {

            int tag = src[start++] & 0xFF;

            if (tag == 0x00 || tag == 0xFF) {
                continue;
            }

            if ((tag & 0x1F) == 0x1F) {
                if (start >=  len ) {
                    break;
                }

                tag = (tag << 8) | src[start++] & 0xFF;
                // tag has 3 bytes (0xFFFFFF)
                /// check this line it could what you need.
                if ((tag & 0x80) != 0) {
                    if (start >=  len ) {
                        break;
                    }
                    //// Append third byte to the Tag.
                    tag = (tag << 8) | src[start++] & 0xFF;
                } 
            }
       /// ...
} ///end while

我希望這對你有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM