You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ACS ACR1252无法读取Mifare Desfire/Plus及PN71501模拟RFID标签

问题核心原因
  • 发送的APDU指令完全不匹配标签协议
    当前代码构造的CLA=0xFF, INS=0xB0是ACR1252针对普通Mifare Classic标签的存储器直接读取指令,仅适配无加密、存储结构直接映射Iso7816接口的普通RFID标签。疑似Mifare Desfire/Mifare Plus的标签有独立的原生指令集,完全不识别标准Iso7816的B0读二进制命令,直接发送这类指令只会收到“指令不支持”的错误状态码,无法获取业务数据。
  • PC/SC通道的能力匹配不足
    连接读卡器时使用了SCardProtocol.Any自动适配协议,对接PN7150模拟的Desfire/Plus标签时,PC/SC栈默认仅开放基础的ATR、UID交互通道,不会自动开启Mifare原生指令透传能力,所有上层业务指令会被驱动层拦截。
  • 读卡器固件能力限制
    不同版本的ACR1252固件对Mifare Desfire的支持能力差异极大,低版本固件未内置Desfire安全通道计算、原生指令透传的能力,即使指令格式正确也无法完成正常交互。而iPhone的NFC控制器原生内置完整的Desfire协议栈,不依赖外部PC/SC驱动,因此可以正常读取。
  • 标签的访问权限约束
    Mifare Desfire/Plus的所有业务文件默认带访问控制逻辑,未完成对应密钥的认证流程、未建立加密安全通道的前提下,所有读操作都会被标签主动拒绝,这也是第三方通用读取软件无法成功读取的核心原因——这类软件默认走无认证公开读流程,无法突破标签的权限校验。
排查解决步骤
  • 先确认标签真实类型
    导出你当前读到的完整ATR字段,对照Mifare各类型的ATR特征值,确认标签是模拟成ISO14443-4 Type4标签,还是运行原生Mifare Desfire/Plus协议,避免后续指令方向走偏。
  • 重构APDU交互逻辑
    完全替换当前的B0读二进制指令,按照Desfire原生指令的交互流程操作:
    1. 发送应用选择指令0x90 5A 00 00 + 目标应用ID长度 + 应用ID + 00,选中需要读取的业务应用
    2. 根据标签的密钥配置发送对应认证指令(DES密钥用0x90 AA指令、3DES密钥用0x90 AB指令、AES密钥用0x90 AA指令带对应参数),完成双向认证建立安全通道
    3. 认证通过后,发送读文件指令0x90 BD 00 00 + 参数长度 + 读取参数 + 00获取业务数据,不要硬套标准Iso7816的读二进制命令。
  • 调整读卡器连接参数
    连接读卡器时不要使用SCardProtocol.Any,针对Desfire标签明确指定T=1协议;如果ACR1252支持Mifare透传模式,先通过读卡器厂商定义的专属指令开启透传通道,再发送原生Mifare指令。
  • 升级读卡器固件
    联系设备供应商获取ACR1252对应型号的最新固件,确认固件版本支持Desfire全指令透传、安全通道计算能力,淘汰未做协议适配的低版本固件。
  • 对比正常交互流程定位偏差
    拿到PN7150的调试权限后,抓包记录iPhone成功读取标签时的完整指令序列,和你自己发送的指令逐帧比对,快速定位是认证步骤缺失、指令参数错误还是通道配置问题。

内容的提问来源于stack exchange,提问作者Aleksei .C

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.25 05:45:02