如何使用pyscard结合戴尔ControlVault 3非接触式读卡器读取Mifare Classic卡
如何使用pyscard结合戴尔ControlVault 3非接触式读卡器读取Mifare Classic卡
嘿,我刚好在用戴尔Latitude 5430的ControlVault 3非接触式读卡器,也折腾过用pyscard读Mifare Classic卡,给你分享下具体的操作步骤和注意事项!
先说说我的设备情况
- 笔记本:戴尔Latitude 5430
- 读卡器:戴尔ControlVault 3非接触式智能卡读卡器(Broadcom芯片)
- 在Windows设备管理器里,它显示为
Broadcom Corp Contactless SmartCard 0
我之前已经用pyscard成功处理过Desfire卡,现在把经验扩展到Mifare Classic卡上。
具体操作步骤
首先,确保你已经安装了pyscard库,没装的话先在命令行跑pip install pyscard。
1. 识别并连接目标读卡器
第一步还是先找到我们的Broadcom读卡器,建立连接:
from smartcard.scard import * from smartcard.util import toHexString def select_reader(): # 遍历所有可用读卡器,定位到我们的目标设备 for reader in readers(): print(f"检测到读卡器:{reader.name}") if reader.name == 'Broadcom Corp Contactless SmartCard 0': return reader # 选中目标读卡器 target_reader = select_reader() if not target_reader: print("没找到目标读卡器,请检查设备是否正常连接!") exit() # 建立与读卡器的连接 card_connection = target_reader.createConnection() try: card_connection.connect() print("成功连接到读卡器啦!") except Exception as e: print(f"连接失败:{str(e)}") exit()
2. 发送Mifare Classic专属指令
Mifare Classic卡和Desfire卡的指令逻辑不一样,必须先验证对应扇区的密钥,才能读取或写入数据。这里以读取扇区0的块0为例(Mifare Classic 1K卡有16个扇区,每个扇区含4个块,最后一个块是密钥存储块)。
第一步:验证扇区密钥
先发送密钥验证指令,这里用默认的A密钥FFFFFFFFFFFF做演示:
# 构造验证A密钥的指令(针对扇区0) auth_cmd = [0xFF, 0x86, 0x00, 0x00, 0x05, 0x01, 0x00, 0x00, 0x60, 0x00] # 追加默认A密钥 auth_cmd += [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF] try: # 发送验证指令 response, sw1, sw2 = card_connection.transmit(auth_cmd) if sw1 == 0x90 and sw2 == 0x00: print("扇区0的A密钥验证成功!") else: print(f"密钥验证失败,返回码:{hex(sw1)}{hex(sw2)}") except Exception as e: print(f"发送指令出错:{str(e)}") exit()
第二步:读取卡内数据
密钥验证通过后,就可以发送读取指令获取块内的数据了:
# 构造读取块0的指令(块地址0x0000,读取16字节) read_cmd = [0xFF, 0xB0, 0x00, 0x00, 0x10] try: data, sw1, sw2 = card_connection.transmit(read_cmd) if sw1 == 0x90 and sw2 == 0x00: print(f"读取块0成功,十六进制数据:{toHexString(data)}") # 转成ASCII方便阅读(不可打印字符用.代替) ascii_data = ''.join([chr(b) if 32<=b<=126 else '.' for b in data]) print(f"ASCII格式数据:{ascii_data}") else: print(f"读取失败,返回码:{hex(sw1)}{hex(sw2)}") except Exception as e: print(f"读取数据出错:{str(e)}")
一些要注意的点
- 每个扇区都需要单独验证密钥,不同扇区可能用不同的密钥,要是你的卡不是默认密钥,记得替换成你实际的A/B密钥
- Mifare Classic 1K有16个扇区,4K版本有40个扇区,操作的时候要对应好扇区和块的地址
- 戴尔ControlVault 3读卡器原生支持Mifare Classic协议,所以不用额外配置,直接用就行
备注:内容来源于stack exchange,提问作者Mert Mertce
相关产品推荐
相关产品推荐

