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

如何给MIFARE DESFire EV2写入员工信息与小额交易余额(工卡功能)

MIFARE DESFire EV2 员工卡写入方案:软件/编程双路径

最简软件操作方案(无需编程)

  • 准备工具:PC/SC兼容NFC读写器(如ACR122U)、MIFARE DESFire EV2卡、DESFire专用管理工具(如官方MIFARE DESFire EV2 Toolkit类软件)
  • 操作步骤:
    1. 安装读写器驱动,确保系统识别设备
    2. 打开管理工具,连接读写器并放置卡片
    3. 初始化新卡:设置全局应用密钥,创建两个独立应用——一个用于存储员工档案(二进制数据文件),一个用于小额余额(钱包文件)
    4. 写入员工档案:进入员工档案应用,创建二进制文件,将结构化员工信息(如自定义字节流、JSON转字节)写入
    5. 写入初始余额:进入余额应用,创建钱包文件,输入初始余额数值并确认写入
    6. 验证:读取两个应用的数据,确认信息与余额无误

编程实现分步教程(Python示例)

准备工作

安装pyscard库:

pip install pyscard

准备PC/SC兼容读写器

核心代码步骤

  1. 连接卡片
from smartcard.System import readers
from smartcard.util import toHexString, toBytes

# 获取第一个可用读写器
reader = readers()[0]
conn = reader.createConnection()
conn.connect()

# 确认连接DESFire EV2卡
select_cmd = [0x90, 0x5A, 0x00, 0x00, 0x03, 0xD2, 0x76, 0x00, 0x00, 0x00]
_, sw1, sw2 = conn.transmit(select_cmd)
if sw1 == 0x90 and sw2 == 0x00:
    print("已成功连接DESFire EV2卡")
  1. 创建应用与文件
# 创建员工档案应用(应用ID:0x000001)
create_emp_app = [0x90, 0xCA, 0x00, 0x00, 0x07, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00]
conn.transmit(create_emp_app)

# 选择员工档案应用,创建二进制数据文件(文件ID:0x01)
select_emp_app = [0x90, 0x5A, 0x00, 0x00, 0x03, 0x00, 0x00, 0x01, 0x00]
conn.transmit(select_emp_app)
create_emp_file = [0x90, 0xCD, 0x00, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00]
conn.transmit(create_emp_file)

# 创建余额钱包应用(应用ID:0x000002)
create_wallet_app = [0x90, 0xCA, 0x00, 0x00, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00]
conn.transmit(create_wallet_app)

# 选择余额应用,创建钱包文件(文件ID:0x01)
select_wallet_app = [0x90, 0x5A, 0x00, 0x00, 0x03, 0x00, 0x00, 0x02, 0x00]
conn.transmit(select_wallet_app)
create_wallet_file = [0x90, 0xCD, 0x00, 0x00, 0x07, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]
conn.transmit(create_wallet_file)
  1. 写入数据
# 写入员工信息(示例:员工ID=001,姓名=张三,转为自定义字节流)
emp_info = toBytes("3030315F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F")
write_emp_cmd = [0x90, 0xDB, 0x00, 0x01, len(emp_info)] + emp_info + [0x00]
conn.transmit(write_emp_cmd)

# 写入初始余额(示例:100元,4字节大端格式)
balance = [0x00, 0x00, 0x00, 0x64]
write_balance_cmd = [0x90, 0x3C, 0x00, 0x01, 0x04] + balance + [0x00]
conn.transmit(write_balance_cmd)
  1. 验证读写结果
# 读取员工信息
read_emp_cmd = [0x90, 0xBD, 0x00, 0x01, 0x14, 0x00]
emp_data, _, _ = conn.transmit(read_emp_cmd)
print("读取到的员工信息:", toHexString(emp_data))

# 读取余额
read_balance_cmd = [0x90, 0x3B, 0x00, 0x01, 0x00]
balance_data, _, _ = conn.transmit(read_balance_cmd)
print("当前余额:", int.from_bytes(balance_data, byteorder='big'))

关键注意事项

  • 实际使用需添加密钥验证逻辑,避免卡片被非法访问
  • 员工信息建议采用TLV或自定义结构化格式,便于后续解析
  • 钱包操作需遵循DESFire原子性规范,防止余额修改异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 14:33:25