【问题标题】:how to parse 3 byte length BER-TLV TAG如何解析 3 字节长度的 BER-TLV TAG
【发布时间】:2020-03-21 19:02:09
【问题描述】:

我正在使用一些 EMV 标签,其中大多数标签的长度为 12 字节,例如 9F02, 81,.. 我知道有一个特定的位配置知道我如何确定标签长度以确定标签是否为 2 字节长度或更大,我使用:

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

但是当我有一些比这更大的标签时,我不知道该怎么做。

我正在使用 EMV 数据,我正在使用认证卡进行测试,我收到了 these tags are: DF8111, DF8119, DF811E, DF812C 它们与 CVM 相关。

【问题讨论】:

  • 你必须知道系统定义了什么。您没有提供足够的信息让我们能够为您提供帮助。 TLV 编码有许多可能的系统。 “EMV”是指“EuroPay、MasterCard、Visa”吗? BER 大概是 ASN.1 基本编码规则。但我们不必猜测。
  • 抱歉,我正在使用 EMV(Europay、mastercard、Visa)卡数据。
  • 我试图在 google 中找到,但实际上使用 3 字节长度的标签的做法似乎并不常见。
  • 这表明可能没有 3 字节标签。为什么你认为这就是你得到的?
  • 搜索“emv 规范”会出现 4.2 和 4.3 版本(后者似乎是从 2011 年 11 月开始的,所以 4.2 版本应该不是很相关),以及一个网站 emvco.com 和链接到 PDF 文件。有第 3 册——我不确定第 1 册或第 2 册中可能包含什么内容。第 3 册中提到了 BER-TLV。PDF URL 包含 2017 年的日期。您仍然需要澄清您的问题是什么——在哪里您认为您从中获得了无证编码。我无能为力了。

标签: c emv tlv


【解决方案1】:

通过 EMV 4.3 Book 3,附件 B - BER-TLV 数据对象规则 B1、B2、B3 部分。 如果您准确地遵循这一点,那么您将不需要存储静态标签列表;它清楚地说明了如何编码和解释标签长度和值。

【讨论】:

    【解决方案2】:

    根据

    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
    

    希望对你有所帮助。

    【讨论】:

    • 我发现了一些我认为不属于 0x1F 规则的 EMV 标签!根据 EMV Book 4.3 Annex B,B1~B5 = 1 表示有后续 Byte 那么为什么这条规则不暗示“628C Security attribute in compact format”或任何其他类似标签?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多