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

MIFARE DESFire EV2卡读写求助:ACR1252U APDU命令报错63 00

核心问题定位

你之前用的FF 82、FF 86、FF B0都是MIFARE Classic普通IC卡的专属命令,但MIFARE DESFire EV2是基于ISO 14443-4的智能卡,完全不兼容这类指令,这就是返回63 00错误的根本原因。


一、MIFARE DESFire EV2核心概念解释

  • AID(应用标识符):DESFire卡采用「应用-文件」分层结构,每个应用对应一个唯一的AID(3-16字节),相当于卡内的独立加密分区,不同应用可以配置不同的密钥和文件规则。
  • 文件:每个应用下可创建多种类型文件(二进制文件、线性记录文件等),你要传输的少量二进制数据就存在二进制文件中。
  • 操作逻辑:必须先通过AID选中目标应用,再选中该应用下的具体文件,完成对应应用的认证后,才能执行读写操作。

二、ACR1252U读写DESFire EV2的正确流程(结合pyscard)

你的前期初始化命令(开启透明会话、激活天线、ISO14443-4A模式)已经返回90 00,说明透明传输通道正常,接下来直接转发DESFire原生命令即可,无需再用MIFARE Classic指令。

分步操作及APDU说明

1. 获取卡UID(可选,确认卡连接正常)

通过透明通道发送DESFire的「获取UID」命令:

# APDU格式:FF C2 00 00 [命令长度] [DESFire命令字节]
# DESFire Get UID命令码为0x60
apdu = [0xFF, 0xC2, 0x00, 0x00, 0x01, 0x60]
response, sw1, sw2 = connection.transmit(apdu)
# 正常返回:UID字节数组 + 状态码90 00

2. 应用认证(以默认应用AID 0x000000、默认密钥0xFFFFFFFFFFFF为例)

新手推荐先使用明文认证模式(默认卡一般开启),步骤如下:

# DESFire明文认证命令码为0x1A,参数:密钥号(0x00) + 6字节密钥
apdu = [0xFF, 0xC2, 0x00, 0x00, 0x08, 0x1A, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]
response, sw1, sw2 = connection.transmit(apdu)
# 返回90 00表示认证成功;若返回63 00则密钥不匹配或卡不支持明文认证

3. 选择目标应用

选中默认应用(AID为0x000000):

# DESFire选择应用命令码为0x5A,参数:3字节AID
apdu = [0xFF, 0xC2, 0x00, 0x00, 0x04, 0x5A, 0x00, 0x00, 0x00]
response, sw1, sw2 = connection.transmit(apdu)
# 返回90 00表示应用选中成功;自定义AID替换后3字节即可

4. 创建二进制文件(如卡内无现成文件)

创建一个ID为0x01、大小32字节的二进制文件:

# DESFire创建标准数据文件命令码为0xCD
# 参数:文件ID(0x01) + 通信设置(0x00) + 访问权限(0x0000) + 文件大小(0x000020)
apdu = [0xFF, 0xC2, 0x00, 0x00, 0x07, 0xCD, 0x01, 0x00, 0x00, 0x00, 0x00, 0x20]
response, sw1, sw2 = connection.transmit(apdu)
# 返回90 00表示文件创建成功

5. 写入二进制数据

往文件ID 0x01的偏移0处写入16字节数据(示例为0x01到0x10):

# DESFire写数据命令码为0x3D
# 参数:文件ID(0x01) + 偏移量(0x0000) + 数据长度(0x10) + 数据内容
data = list(range(1, 17))  # 示例数据:[1,2,...,16]
apdu = [0xFF, 0xC2, 0x00, 0x00, 0x06 + len(data)] + [0x3D, 0x01, 0x00, 0x00, 0x10] + data
response, sw1, sw2 = connection.transmit(apdu)
# 返回90 00表示写入成功

6. 读取二进制数据

从文件ID 0x01的偏移0处读取16字节:

# DESFire读数据命令码为0xBD
# 参数:文件ID(0x01) + 偏移量(0x0000) + 读取长度(0x10)
apdu = [0xFF, 0xC2, 0x00, 0x00, 0x06, 0xBD, 0x01, 0x00, 0x00, 0x10]
response, sw1, sw2 = connection.transmit(apdu)
# 正常返回:读取的16字节数据 + 状态码90 00

三、关键注意事项

  • 透明传输格式:所有DESFire原生命令必须通过FF C2 00 00 [命令总长度] [DESFire命令+参数]的格式转发给ACR1252U,这是阅读器转发卡命令的标准格式。
  • 密钥匹配:如果卡的应用密钥不是默认的FFFFFFFFFFFF,必须替换为实际密钥,否则认证会失败。
  • 错误码排查:63 00多为命令不兼容或认证失败;69 82表示权限不足,需检查是否完成认证或密钥是否正确。

四、参考文档

  • 《MIFARE DESFire EV2 Datasheet》:官方核心文档,包含所有原生命令格式、认证流程、文件系统操作细节。
  • 《ACR1252U API Reference》:重点查看「Transparent Session(透明会话)」章节,掌握卡原生命令的转发规则。

内容的提问来源于stack exchange,提问作者Kapil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 01:12:20