【发布时间】:2016-11-17 19:30:15
【问题描述】:
我有一个终端,它有自己的 API 来在芯片和终端之间建立和发送命令,有一个函数可以传输 APDU 命令并以字节数组的形式返回答案。
例如,如果要读取标签 5A(应用程序 PAN),我发送以下命令:
byte[] byteArrayAPDU = new byte[]{(byte)0x00, (byte)0xCA, (byte)0x00, (byte)0x5A};
int nResult = SmartCardInterface.transmit(nCardHandle, byteArrayAPDU, byteArrayResponse);
变量byteArrayResponse得到对APDU命令的响应。
当我将byteArrayAPDU 的值转换为一串十六进制数字时,这给了我:00 CA 00 5A。并且对该命令的响应是6E 00(不支持类)。
我的设备使用 ISO 7816 作为技术规范。我发送 APDU 命令的方式是否正确?我问这个是因为我读过 APDU 命令必须至少有 5 个值,但我不知道在第五个参数中发送什么。我不知道响应的长度是多少。
您能否举例说明如何在 APDU 命令中获取标签 5A 或其他内容?
如果命令正确,而不是我现在看到的6E 00,在转换为字符串时,我会以纯文本形式看到信息吗?
【问题讨论】:
-
在继续之前,我们可以假设 (1) 您正在遵循 APDU 命令的 emv 标准,并且 (2) 您正在使用流行的卡应用程序,例如 vsdc、m/chip、d-pas (分别是visa、mastercard、discover)而不是专有卡?
-
是的,我正在使用 EMV 规范,正如 EMV 规范所说 (EMV_v4.3_Book_3_Application_Specification_20120607062110791) 我还发送了此示例中的 APDU 命令code.google.com/archive/p/javaemvreader/wikis/… 我必须阅读的卡是 VISA和万事达卡 Y del libro:
标签: java smartcard apdu smartcard-reader emv