Mifare Classic访问位配置:隐藏Key B且支持扇区自由写入
解决Mifare Classic隐藏Key B并自由写入扇区的问题
要实现隐藏Key B且可自由写入目标扇区的需求,核心是配置合法的扇区尾块访问控制位,同时满足三个关键条件:
- 数据块支持Key A/Key B读写
- 尾块仅允许读取Key A,Key B不可见
- 访问控制位符合Mifare Classic的冗余规则(避免卡进入错误状态)
问题分析
你之前的第二个配置(0x7F, 0x07, 0x88)违反了Mifare的访问控制位冗余规则(要求C3 = ~(C1 | C2),按8位无符号数取反),导致卡写入后进入异常状态,出现收发错误。
正确的访问控制位配置
以下配置满足所有需求:
trailerData[6] = 0x0F.toByte() // C1 trailerData[7] = 0x07.toByte() // C2 trailerData[8] = 0xF0.toByte() // C3
配置验证
- 冗余规则检查:
0x0F | 0x07 = 0x0F,~0x0F = 0xF0(8位无符号取反),完全符合卡的要求,不会触发异常。 - 权限说明:
- 数据块(扇区2的块0、1、2):支持Key A或Key B读写,满足你自由写入的需求。
- 尾块:仅允许通过Key A读取,Key B部分会返回0x00(MCT显示为
--:--:--:--:--:--);同时允许通过Key A修改尾块的访问控制位和Key B(若后续需要调整配置)。
补充说明
- 确保写入尾块时,Key A保持为出厂默认值
0xFFFFFFFFFFFF(注意是6字节,你描述的0xFFFFFFFFFF少了一个字节),Key B设置为你的自定义密钥。 - 写入尾块前,必须先用合法密钥(Key A或当前有效的Key B)验证扇区权限,避免写入失败。
内容的提问来源于stack exchange,提问作者john_smith
相关产品推荐
相关产品推荐

