使用ACR1252与pyscard修改预编码Mifare 4K卡扇区尾块返回错误99
Mifare 4K卡写入尾块返回错误码99原因分析
核心原因1:写入的访问位值不符合编码规则
Mifare Classic系列卡的3字节访问位有严格的编码约束,3个存储字节中同时包含权限位的原值和取反校验值,只有满足对应映射关系的数值才会被卡片识别为合法值,非法值会直接被卡片拒绝写入。
你当前代码中直接写入的0x78 0x77 0x88不满足官方编码的对应规则,属于无效访问位值,这是写入失败的最常见原因。你需要先根据期望的各块访问权限,按照Mifare Classic官方的访问位编码规则计算出合法的3字节存储值后再执行写入。
核心原因2:认证密钥的权限不足
供应商预写的访问位0xFF 0x07 0x80对应的扇区尾块(扇区第3块)访问权限如下:
- KeyA仅支持读取,不可修改
- 访问位、KeyB仅支持KeyB认证通过后写入,哪怕KeyA认证通过也没有写入权限
你代码中认证指令的倒数第二个参数为0x61,对应ACR1252读卡器的KeyB认证逻辑,如果实际参数配置错误用了KeyB以外的密钥认证,就会因为权限不足被卡片拒绝。
补充说明
ACR1252读卡器返回的错误码99是读卡器自定义错误码,含义为「卡片主动拒绝本次操作,无更具体的错误信息返回」,和上述两种场景的表现完全匹配。
原厂空白卡的默认访问位配置支持KeyA、KeyB写入尾块,所以相同操作不会触发错误。
内容的提问来源于stack exchange,提问作者Ajax
相关产品推荐
相关产品推荐

