如何将pcsc命令发送到SAM而不是读卡器上的卡

时间:2017-10-26 08:04:25

标签: python mifare pcsc

我有带SAM插槽的acr1281阅读器(安全访问模块)。 我可以使用python库smartcard通过pc / sc与卡通信。 但我想将命令发送到插入阅读器的SAM。

如何'切换命令频道',甚至可能吗? 智能卡库可以向阅读器发送控制命令(PC_to_RDR_Escape),但在acr1281文档中只指定了GetFirmvareVersion命令。

我甚至可以看到SAM插入与否 - 我调用SCardStatus()并插入SAM获取0x34代码(据我所知这是SCARD_POWERED=0x10 | SCARD_NEGOTIABLE=0x20 | SCARD_PRESENT=0x04),没有SAM就是0x0c = SCARD_SWALLOWED=0x08 | SCARD_PRESENT=0x04

但我发送的所有命令都放在阅读器上的MIFARE PICC上。我想将命令发送到插入阅读器的SAM。

1 个答案:

答案 0 :(得分:1)

在安装了pscs驱动程序的Ubuntu Linux中,我在smartcard库中有3个读者:

from smartcard.System import readers
print(readers())
  • ACS ACR1281 1S双读卡器00 00
  • ACS ACR1281 1S双读卡器00 01
  • ACS ACR1281 1S Dual Reader 00 02

阅读器00 00对我不起作用,我认为是联系卡, 读者00 01适用于PICC(在我的情况下是MIFARE), 阅读器00 02适用于ACR中的SAM插槽,

所以我使用阅读器01发送卡APDU和阅读器02以向SAM发送命令并成功解决了我的任务。

不确定如何自动找到它们但我认为这个00 00等等是名称中的常量,我可以通过名字中的最后一个符号为PICC和SAM选择读者。

我只是smartcard.CardRequest.CardRequest()连接到PICC阅读器 - 等待附近的卡。 所以我必须找到只有SAM阅读器并连接到它:

sam_connection = readers()[2].createConnection()
sam_connection.connect(mode=SCARD_SHARE_SHARED,
                        disposition=SCARD_LEAVE_CARD,
                        protocol=SCARD_PROTOCOL_ANY)