Mifare Classic 1K的程序是

  • 轮询标签
  • 验证那些标签
  • 如果身份验证成功,则进行读/写。

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

    的命令轮询标签
    new byte[] { (byte) 0xFF, (byte) 0x00, (byte) 0x00,
                    (byte) 0x00, (byte) 0x04, (byte) 0xD4, (byte) 0x4A,
                    (byte) 0x01, (byte) 0x00 }
    

    身份验证命令
    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 };
    

    My Related Complete Code is here...

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

    最佳答案

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

    部门预告片如下所示:

    +-----------------------------+--------------+----+-----------------------------+
    |  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数据表中找到可能的访问条件的详细列表:https://www.nxp.com/docs/en/data-sheet/MF1S50YYX_V1.pdf

    关于java - Mifare Classic 1K的锁定机制,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27885861/

    10-12 23:32