我正在尝试所有使用mifare卡读取序列号。 我可以使用pyscard的atr。但是当我使用多张牌时,他会给出相同的ID。阅读序列号mifare与pyscard
或者我在mifare卡上写数据。但我怎么做到这一点。我正在使用ubuntu服务器上的python脚本。我的读卡器是一个acr122u。
请这将是非常有益的
感谢
我正在尝试所有使用mifare卡读取序列号。 我可以使用pyscard的atr。但是当我使用多张牌时,他会给出相同的ID。阅读序列号mifare与pyscard
或者我在mifare卡上写数据。但我怎么做到这一点。我正在使用ubuntu服务器上的python脚本。我的读卡器是一个acr122u。
请这将是非常有益的
感谢
最好的方式来使用是pyscard(Python模块)或Java Smart Card I/O(Java的JDK的一部分)
你应该使用APDU此的命令工作。 如果使用mifare卡,获取UID的命令是0xFF,0xCA,0x00,0x00,0x00。
跟着this link,看看高级别的api。这应该给你一个想法。
这是一些快速和脏的python代码,它使用pyscard并通过从Patrick's answer发送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)