使用pyscard读取Mifare序列ID

4 投票
3 回答
8079 浏览
提问于 2025-04-17 05:33

我正在尝试用Mifare卡读取一个序列号。
我可以使用pyscard中的atr,但当我使用多张卡时,它会给我相同的ID。

或者我可以在Mifare卡上写数据,但我该怎么做呢?我在一个Ubuntu服务器上使用Python脚本。我的读卡器是ACR122U。

请帮帮我,这将非常有帮助。

谢谢!

3 个回答

3

这里有一些简单粗暴的Python代码,它使用了pyscard库,并通过发送来自Patrick的回答的APDU来打印UID(这里用断言代替了真正的错误处理)。

from smartcard.scard import *

hresult, hcontext = SCardEstablishContext(SCARD_SCOPE_USER)

assert hresult==SCARD_S_SUCCESS

hresult, readers = SCardListReaders(hcontext, [])

assert len(readers)>0

reader = readers[0]

hresult, hcard, dwActiveProtocol = SCardConnect(
    hcontext,
    reader,
    SCARD_SHARE_SHARED,
    SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1)

hresult, response = SCardTransmit(hcard,dwActiveProtocol,[0xFF,0xCA,0x00,0x00,0x00])

print(response)
5

你需要使用APDU命令才能让这个工作。对于mifare卡,获取UID的命令是0xFF, 0xCA, 0x00, 0x00, 0x00。

可以参考这个链接,在高层API部分查看。这会给你一些启发。

0

最好的使用方法是 pyscard(一个Python模块)或者 Java智能卡输入输出(这是Java开发工具包的一部分)

撰写回答