我的问题是我使用Arduino上的“读写”示例逐块重写RFID卡(MIFARE Classic 1K)。我开始在第4块写作。在第7块它停止了,现在我无法读取任何扇区。我给每个街区写了零。
DumpToSerial
函数只为每个扇区打印
PCD_Authenticate()失败:通讯超时。
它仍然可以读取UID,SAK和PICC类型。
我是否销毁了卡片,还是可以将其恢复?
更多信息:
答案 0 :(得分:1)
使用MIFARE Classic 1K,每4个块是扇区预告片(每4个块分组为一个扇区)。扇区尾部包含访问密钥(字节0..5上的密钥A,字节10..15上的密钥B)和扇区的访问条件(字节6..8上的访问位)。
访问条件受冗余机制保护,其中每个访问位在正逻辑和负逻辑中多次出现。 MIFARE Classic卡允许使用无效值(访问位的不可能组合)覆盖这些访问条件。但是,一旦访问条件被设置为这样的无效值,芯片的安全逻辑将禁用对扇区的所有访问。因此,向扇区预告片写入无效访问条件会导致整个扇区无法使用。此状态永久且无法恢复。
您使用全零编写了从块4开始的所有块。因此,您编写了扇区1的扇区尾部(在块7中),访问条件设置为全零。这是访问条件的无效值。因此,第1部分永久无法使用。由于您在写完第7块后表示您立即收到错误,您可能很幸运并且没有覆盖其他部门预告片(例如第2部分的第11行)。在这种情况下,其他部门仍应可用。同样,自从你开始在第4块写入以来,第一个扇区(扇区0,块0..3)也应该仍然可以访问。