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

如何对Mifare Ultralight C执行RF重置或重新激活操作

Mifare Ultralight C 3DES密钥写入后重激活实现方案

核心概念说明

根据NXP MF0ICU2手册要求,新写入的认证密钥不会在当前RF会话中生效,必须完成以下两种操作之一才会加载新密钥:

  • RF硬重置:标签完全离开手机NFC射频场,掉电后重新进入场上电,这是兼容性100%的生效方式
  • 标签软重激活:不离开射频场,通过NFC命令让标签回到初始状态,重新加载配置,兼容性随手机NFC栈实现有差异

Android端实现(供Flutter MethodChannel调用)

你当前拿到的IUltralightC是Android NFC框架的标准标签技术对象,重激活逻辑不要在UltralightC协议层做,要走底层NfcA协议实现:

/**
 * 写入3DES密钥完成后调用,重激活标签加载新密钥
 * @return true 软激活成功,false 软激活失败需引导用户离场硬重置
 */
fun reloadAuthKey(tag: Tag): Boolean {
    // 先关闭所有已存在的标签连接
    runCatching { IUltralightC.get(tag)?.close() }
    val nfca = NfcA.get(tag) ?: return false

    return runCatching {
        // 发送HLTA(0x50 0x00)命令让标签退回HALT状态
        nfca.connect()
        nfca.transceive(byteArrayOf(0x50, 0x00))
        nfca.close()

        // 重新发送WUPA命令唤醒选卡,完成软激活
        nfca.connect()
        nfca.atqa != null // 校验选卡成功
    }.getOrDefault(false)
}

实现注意事项

  1. 软激活有兼容性限制:部分厂商修改了Android NFC栈实现,会缓存标签的会话状态,即使发了HLTA命令也不会重新加载密钥,这种情况直接在Flutter端弹出提示引导用户做硬重置即可:

请将NFC标签移开手机感应区停留1秒后放回,新密钥即可生效

  1. 标签类型校验:你提到测试用的是NTAG213,该标签不支持Mifare Ultralight C的3DES双向认证功能,仅兼容普通Ultralight读写指令,写入3DES密钥的操作本身在NTAG213上不会生效,测试前请确认标签为正品MF0ICU2。
  2. 写入校验:3DES密钥存储在标签0x2C~0x31共6个页,写入完成后不要立刻调用authenticate()方法,必须等重激活流程完成后再做认证,否则会一直用旧密钥(默认全0密钥)做认证,返回失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 17:42:31