nfc - 如何找到我本地交通卡的 AID 号码?

标签 nfc apdu hce emv

我有一张城市交通卡。我需要知道卡的援助(应用程序标识符)号码是多少。根据 EMV Book 1,我必须使用 List of AIDs 方法(第 141 页)。但是如何呢?

我还有一个 ACR122U 读卡器。我可以向卡发送 APDU 命令。我只需要卡片的帮助。此外,我总是收到 SW=6A82 错误。这意味着“找不到文件”。我想,我需要知道真正的 AID 号码来解决这个问题。我想看到 SW=9000(成功)响应...

编辑:创建选择 apdu 命令的代码

private static final byte[] CLA_INS_P1_P2 = { 0x00, (byte)0xA4, 0x04, 0x00 };
private static final byte[] AID_ANDROID = { (byte)0xF0, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 };

private byte[] createSelectAidApdu(byte[] aid) {
    byte[] result = new byte[6 + aid.length];
    System.arraycopy(CLA_INS_P1_P2, 0, result, 0, CLA_INS_P1_P2.length);
    result[4] = (byte)aid.length;
    System.arraycopy(aid, 0, result, 5, aid.length);
    result[result.length - 1] = 0;
    return result;
}

谢谢..

最佳答案

通常,您应该查找卡片文档,其中应该描述文件的组织方式。

但是,由于您正在读取 ISO-DEP 卡,您可以引用 ISO/IEC CD 7816-4。该卡应执行本标准中的部分指令。根据第 5.2 节,可以使用文件的标识符来选择文件,这意味着您可以枚举位于 MF 中的所有文件。

所以一个可能的解决方案是:

  1. 按标识符指令发送选择文件为

    00 A4 00 00 02 id 00

    其中 id 的范围从 0000FFFF

  2. 收到 SW=9000 后,响应应包含文件控制信息(FCI,请参阅第 5.6 节)。然后,您可以在字节 84 之后找到 DF 名称。比如卡片响应

    6F 15 84 0D 4E 43 2E 65 43 61 72 64 2E 44 46 30 31 A5 04 9F 08 01 02 90 00,

    DF 名称4E 43 2E 65 43 61 72 64 2E 44 46 30 3184后的字节0D表示DF name的长度为0x0D。您可以将其用作 AID。

关于nfc - 如何找到我本地交通卡的 AID 号码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34145742/

相关文章:

Android NFC Card Emulation 尝试模拟卡

android - 使用 Android 4.4 模拟 Mifare 卡

c++ - 打开 NFC - 错误 LNK2019 : unresolved external symbol __imp__ShellExecuteW@24

java - IsoDep.transceive(command) 以 [110, 0] 字节响应?

javacard - PROVIDE LOCAL INFORMATION终端响应中的位置信息长度

java - 读取智能卡文件

android - 如何处理读者收到的S-block?

android - Android 和 Ios 手机内的程序 NFC 卡

android - 使用 Android 读取 NXP ICODE SLI-L 标签

android - 如何使用基于主机的卡仿真 (HCE) 将手机设置为 NFC 标签