nfc - 请求 EMV 卡的 GPO 命令时出现解析器错误

标签 nfc apdu smartcard-reader contactless-smartcard emv

我对 VISA 卡的 GET PROCESSING OPTIONS (GPO) 命令有一些问题。

以下是我对 VISA 应用程序的 SELECT 命令的响应:

6F408407A0000000031010A535500A564953412044454249549F380C9F66049F02069F37049F1A025F2D02656EBF0C1242034761735F550255539F5A0511084008409000

我从中提取了以下 PDOL:9F66049F02069F37049F1A02
我不确定标签 9F66

我的 GPO 命令如下所示:
80a800000100000001000000001000823DDE7A12400

但是我收到一个解析器错误作为响应:
6A80

最佳答案

您的 GPO 命令似乎有很多问题:

80 A8 0000 01       00000001 000000001000 823DDE7A 1240 0
           ^^ ^^^^^ ^^^^^^^^                       ^^^^ ^^
           4. 1.      2.                             3.   5.
  • 首先,您的 GPO 命令发送了几个没有上下文的数据字节。您需要将数据项包装到 PDOL 相关数据对象中:
    83 10 wwwwwwww xxxxxxxxxxxx yyyyyyyy zzzz
    
  • 您的终端交易限定符 (9F66) 设置了 RFU 位。有效的 TTQ 可能如下所示: B620C000 ,与
  • B6 :
  • 支持磁条模式@bit 8
  • EMV 模式支持@bit 6
  • EMV 接触芯片支持@bit 5
  • 在线模式支持@bit 4
  • 支持在线 PIN @bit 3
  • 签名支持@bit 2
  • 其他位 = RFU
  • 20 :
  • 不需要在线密码@bit 8
  • 不需要 CMV @bit 7
  • (接触芯片)支持离线 PIN @bit 6
  • 其他位 = RFU
  • C0 :
  • 发行者更新处理支持@Bit 8
  • 消费者设备 CVM 支持@Bit 7
  • 其他位 = RFU
  • 00 : RFU
  • 您的终端国家代码无效。终端国家/地区代码必须是 BCD 编码到两个字节中的 3 位数值。假设您想使用“124”(加拿大),正确的国家/地区代码将是 0124(奥地利:0040,英国:0826,美国:0840)。
  • Lc 字节(设置为 01 = 一个数据字节)不反射(reflect)实际数据长度。在您的情况下,实际数据长度为 16 字节,因此 Lc 应设置为 10 。考虑到您还需要包含 PDOL 相关数据对象的标签和长度,您的 Lc 字节应设置为 12(18 个字节)。
  • 您作为 GPO 命令显示的十六进制字符串未与字节对齐,因此您缺少 Le 字段的一个半字节。 You Le 字段应该设置为 Le

  • 因此,您的 GPO 命令可能如下所示:
    80 A8 0000 12 83 10 B620C000 000000001000 823DDE7A 0124 00
    

    关于nfc - 请求 EMV 卡的 GPO 命令时出现解析器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23590256/

    相关文章:

    android - 如何使用 NFC 重定向或打开我的 Progressive Web App?

    usb - 通过 CCID 的 ISO/IEC 7816 命令

    javascript - js中的CAC(Common Access Card)读卡器

    安卓光束 : launch application with MIME type record

    java - 如何使用 Android 手动发送 NdefMessage?

    nfc - 防止复制nfc芯片信号

    c - 如何在 C 中创建 APDU (TLV) 解析器

    java - 从 java 智能卡 APDU 收到奇怪的数据?

    tags - 读取EMV卡序列号

    nfc - 从模拟卡中检测出真正的 Mifare 经典卡