我有一张城市交通卡。我需要知道卡的辅助(应用程序标识符)号是多少。根据EMV第1册,我必须使用AID列表方法(第141页)。但是如何?
我还有一个ACR122U读卡器。我可以向卡发送APDU命令。我只需要卡的AID。另外,我总是得到SW = 6A82错误。这意味着" File Not Found"。我想,我需要知道真正的AID号才能解决这个问题。我想看SW = 9000(成功)回复...
编辑:用于创建select 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;
}
谢谢..
答案 0 :(得分:3)
通常,您应查找卡片文档,该文档应描述文件的组织方式。
但是,由于您正在阅读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节)。然后,您可以在字节DF name
之后找到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 name
为4E 43 2E 65 43 61 72 64 2E 44 46 30 31
。 0D
后的字节84
表示DF name
的长度为0x0D
。您可以将其用作AID。