python-3.x - ACR122u/Python3/smartcard lib如何读取块
问题描述
我正在尝试使用智能卡 python3 库从 Mifare 1K 令牌中读取块,但我没有获取数据。我正在使用 ACR122u-A9。
import smartcard
from smartcard.util import toHexString
COMMAND = [0xFF, 0xCA, 0x00, 0x00, 0x00]
READ_16_BINARY_BLOCKS = [0xFF,0xB0,0x00,0x04,0x10]
sprotocol = smartcard.scard.SCARD_PROTOCOL_T1
reader = smartcard.System.readers()
conn = reader[0].createConnection()
conn.connect()
result, sw1, sw2 = conn.transmit(COMMAND,protocol = sprotocol)
if (sw1, sw2) == (0x90, 0x0):
print("The operation completed successfully.")
#AUTHENTICATE = [0xFF, 0x88, 0x00, BLOCK_NUMBER, 0x60, 0x00]
AUTHENTICATE = [0xFF, 0x88, 0x00, 0x01, 0x60, 0x00] #Authenticate block 1
response = conn.transmit(AUTHENTICATE)
print(response)
if response[1] == 144:
print("Authenticated successfully")
value, sw1,sw2 = conn.transmit(READ_16_BINARY_BLOCKS) #read block 1
print(value,sw1,sw1)
但输出始终是:
output1:操作成功完成。
输出2: ([], 144, 0)
output3:认证成功
输出4:[] 99 99
最后一个输出应该给我一个十六进制数据列表,但我什么也没得到,甚至试图读取块 0x00,同样的事情。
更新---我能够读取第 4~7 块,我认为是第 1 扇区,无法读取其他扇区。
解决方案
我找到了一种读取扇区/块的方法,我不确定它是否正确,但它与密钥 A 配合得很好。
import smartcard
from smartcard.util import toHexString
import time
reader = smartcard.System.readers()
if not reader:
print("No readers")
else:
conn = reader[0].createConnection()
conn.connect()
#[0xFF, 0x82, 0x00, 0x00, 0x06,KEY(6 bytes)]
LOADKEY = [0xFF, 0x82, 0x00, 0x00, 0x06,255,255,255,255,255,255]
response = conn.transmit(LOADKEY)
if response[1] == 144:
print("Key A loaded successfully")
time.sleep(2)
#auth block
#[0xFF, 0x86, 0x00, 0x00, 0x05, 0x01, 0x00, BLOCK, KEY-TYPE, 0x00]
COMMAND = [0xFF, 0x86, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00, 0x60, 0x00]
response = conn.transmit(COMMAND)
print(response)
time.sleep(2)
#[0xFF, 0xB0, 0x00, BLOCK-NUMBER, 0x10]
read = [0xFF, 0xB0, 0x00, 0x00, 0x10] #Read block 0
data, sw1, sw2 = conn.transmit(read)
print(toHexString(data))
else:
print("Wrong key A")
推荐阅读
- visual-studio-code - VSCode未在文件夹打开时运行任务
- python - 截图功能在其他机器上不起作用
- go - 如何在函数恐慌之前写入控制台?
- python-3.x - 遍历元组列表,不知何故,“a”总是被视为元组中的偶数 (a,b)
- java - Jsch处理命令确认是或否
- bash - 编写一个脚本,使用 agrep 逐行遍历文档中的行与另一个文档中的行并获得结果
- sql-server - 如何使用 SQL 将用户分配到 Microsoft Navision 中的导航窗格?
- c - 使用带有 char 指针的 strcat 函数
- puppet - Puppet file_line 仅当文件存在时
- c - 生产者-消费者问题中的无限循环