我有一张城市交通卡。我需要知道卡的援助(应用程序标识符)号码是多少。根据 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
中的所有文件。
所以一个可能的解决方案是:
按标识符指令发送选择文件为
00 A4 00 00 02 id 00
其中
id
的范围从0000
到FFFF
。收到
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 31
。84
后的字节0D
表示DF name
的长度为0x0D
。您可以将其用作 AID。
关于nfc - 如何找到我本地交通卡的 AID 号码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34145742/