【问题标题】:How to send pcsc commands to SAM and not to card on reader如何将 pcsc 命令发送到 SAM 而不是读卡器上的卡
【发布时间】:2017-10-26 08:04:25
【问题描述】:

我有带 SAM 插槽(安全访问模块)的 acr1281 读卡器。 我可以通过 pc/sc 使用 python 库smartcard 与卡进行通信。 但我想向插入阅读器的 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 发送命令。

【问题讨论】:

    标签: python mifare pcsc


    【解决方案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 双读卡器 00 02

    Reader 00 00 对我来说是无效的,我想它是用于联系人卡片的, 读者00 01 用于 PICC(在我的情况下为 MIFARE), reader 00 02 用于 ACR 中的 SAM 插槽,

    所以我使用 reader 01 发送卡 APDU 和 reader 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-14
      • 1970-01-01
      • 2015-03-04
      • 2017-09-26
      • 2022-08-04
      • 1970-01-01
      相关资源
      最近更新 更多