3

我有一张城市交通的交通卡。我需要知道卡的辅助(应用程序标识符)号码是什么。根据 EMV Book 1,我必须使用 AID 列表方法(第 141 页)。但是怎么做?

我还有一个 ACR122U 读卡器。我可以向卡发送 APDU 命令。我需要的只是卡的 AID。此外,我总是得到 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;
}

谢谢..

4

1 回答 1

4

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

但是,由于您正在阅读 ISO-DEP 卡,因此您可以参考ISO/IEC CD 7816-4. 卡片应执行本标准中的部分指令。根据第 5.2 节,可以使用其标识符选择文件,这意味着您可以枚举位于MF.

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

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

    00 A4 00 00 02 id 00

    范围id0000FFFF

  2. 一旦您收到SW=9000,响应应该包含文件控制信息(FCI,参见第 5.6 节)。然后您可以找到DF nameafter byte 84。例如,一张卡片响应

    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 name4E 43 2E 65 43 61 72 64 2E 44 46 30 31。_ 0D后面的字节84表示 is 的DF name长度0x0D。您可以将其用作 AID。

于 2015-12-08T08:21:36.203 回答