使用 pyscard 发送 APDU 命令时出现问题

Problem sending an APDU command with pyscard

我正在开发一个涉及 ACR1251 智能卡的简单应用程序 reader。目前我没有它,但它是一个时间敏感的项目,所以我正在使用 vsmartcard 来模拟 reader 和 ISO 7816 卡。

我遇到问题的代码是:

from smartcard.System import readers

reader = readers()[0]
conn = reader.createConnection()
conn.connect()
response, sw1, sw2 = conn.transmit([0xFF, 0xCA, 0x00, 0x00, 0x00]) # Get Data UID

响应代码为 0x69 0x88,表示“不正确的安全消息 (SM) 数据对象”。我在 pyscard 的文档中没有发现任何提及 SM 的内容,谷歌搜索也不成功。

我的代码中是否遗漏了什么?这绝对是可能的,因为我试图以最简单的方式做到这一点,而 pyscard 的级别很低,而且文档并不是真正旨在做简单的事情。

也有可能是模拟器的问题,那样的话我估计只能等海关处理了reader.

对于与 ISO 7816 标准系列兼容的卡(第 4、8 和 9 部分是必不可少的),您指定的 class 字节 0xFF 实际上表示安全消息传递,这与其余部分矛盾字节(对于 MAC 来说太短)

您提供的 APDU 看起来更像是 pseudo-APDU 将 non-processor 卡地址设为 e。 G。 MIFARE 或向 reader 发送命令(相对于卡);这种可能性有相当大的重叠。

作为第一步,您可以尝试其他 class 字节值,0x00(纯 ISO)和 0xA0(GSM-heritage)是最有希望的。 class 字节的结构在 7816 第 4 部分中进行了解释。

支持的命令应该在卡的用户手册中,即使您设法使获取数据成功,以后您将迫切需要它以实现更复杂的功能。 (您是否认为 ISO 7816 卡是通用的或彼此之间严重兼容:错误,现实世界中没有“通用 7816”卡。)