我有带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。
答案 0 :(得分:1)
在安装了pscs驱动程序的Ubuntu Linux中,我在smartcard
库中有3个读者:
from smartcard.System import readers
print(readers())
阅读器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)