Mifare Classic 1K的锁定机制

Mifare Classic 1K的程序是

  1. 轮询标签
  2. validation这些标签
  3. 如果validation成功,则读/写。

我已经完成了这些程序,并且还从特定部门读取和写入数据。

标签的轮询命令是

new byte[] { (byte) 0xFF, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x04, (byte) 0xD4, (byte) 0x4A, (byte) 0x01, (byte) 0x00 } 

validation命令

 new byte[] { (byte) 0xFF, (byte) 0x86, (byte) 0x00, (byte) 0x00, (byte) 0x05, (byte) 0x01,(byte) 0x00, (byte) 0x04, (byte) 0x60,(byte) 0x00 }; 

这里“(字节)0x01”是扇区1

并且在扇区1上写入,块5是

 new byte[] { (byte) 0xFF, (byte) 0x00, (byte) 0x00,(byte) 0x00, (byte) 0x15, (byte) 0xD4, (byte) 0x40,(byte) 0x01, (byte) 0xA0, (byte) 0x05,(byte) 0x01, (byte) 0x02, (byte) 0x03,(byte) 0x04, (byte) 0x05, (byte) 0x06, (byte) 0x07,(byte) 0x08, (byte) 0x09,(byte) 0x0A,(byte) 0x0B, (byte) 0x0C, (byte) 0x0D,(byte) 0x0E, (byte) 0x0F, (byte) 0x10}; 

这里

 (byte) 0x01, (byte) 0x02, (byte) 0x03,(byte) 0x04, (byte) 0x05, (byte) 0x06, (byte) 0x07,(byte) 0x08,(byte) 0x09,(byte) 0x0A,(byte) 0x0B, (byte) 0x0C, (byte) 0x0D,(byte) 0x0E,(byte) 0x0F,(byte) 0x10 

是在第1区的第5块上写的数据。

从扇区1和块5命令读取

 new byte[] { (byte) 0xFF, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x05, (byte) 0xD4, (byte) 0x40, (byte) 0x01, (byte) 0x30, (byte) 0x05 }; 

我的相关完整代码在这里……

我的问题是如何“锁定/只读”特定扇区的块?

MIFARE卡的每个扇区的认证密钥和访问条件位于该扇区的最后一个块( 扇区尾部 )。 您可以使用常规写入命令使用新访问条件和身份validation密钥更新此块。

行业预告片看起来像这样:

 +-----------------------------+--------------+----+-----------------------------+ | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | +-----------------------------+--------------+----+-----------------------------+ | Key A | Access Bits | GP | Key B | | (6 bytes) | (3 bytes) | B | (6 bytes) | +-----------------------------+--------------+----+-----------------------------+ 

因此访问位位于字节6-8中,如下所示:

  +-------+-------+-------+-------+-------+-------+-------+-------+ | Bit 0 | Bit 1 | Bit 2 | Bit 3 | Bit 4 | Bit 5 | Bit 6 | Bit 7 | +-------+-------+-------+-------+-------+-------+-------+-------+ Byte 6: | nC2_3 | nC2_2 | nC2_1 | nC2_0 | nC1_3 | nC1_2 | nC1_1 | nC1_0 | +-------+-------+-------+-------+-------+-------+-------+-------+ Byte 7: | C1_3 | C1_2 | C1_1 | C1_0 | nC3_3 | nC3_2 | nC3_1 | nC3_0 | +-------+-------+-------+-------+-------+-------+-------+-------+ Byte 8: | C3_3 | C3_2 | C3_1 | C3_0 | C2_3 | C2_2 | C2_1 | C2_0 | +-------+-------+-------+-------+-------+-------+-------+-------+ 

其中nCx_y =不是Cx_y,“C1_x,C2_x,C3_x”是块x的访问条件:

  • C1_3,C2_3,C3_3:扇区预告片(该扇区中的块3)
  • C1_2,C2_2,C3_2:该扇区中的块2
  • C1_1,C2_1,C3_1:该扇区中的块1
  • C1_0,C2_0,C3_0:该扇区中的块0

您可以在MIFARE 1K数据表中找到可能的访问条件的详细列表: http : //www.nxp.com/documents/data_sheet/MF1S503x.pdf