gpt4 book ai didi

java - Mifare Classic 1K 的锁定机制

转载 作者:搜寻专家 更新时间:2023-10-31 20:11:05 25 4
gpt4 key购买 nike

Mifare Classic 1K的流程是

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

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

轮询标签的命令是

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 };

这里"(byte)0x01"是Sector 1

写在Sector 1,block 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 的 block 5 上的数据。

从扇区 1 和 block 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...

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

最佳答案

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

扇区预告片如下所示:

+-----------------------------+--------------+----+-----------------------------+
| 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 = not Cx_y 和 "C1_x, C2_x, C3_x"是 block x 的访问条件:

  • C1_3、C2_3、C3_3:扇区尾部(该扇区中的 block 3)
  • C1_2、C2_2、C3_2:该扇区的区 block 2
  • C1_1、C2_1、C3_1:该扇区的 block 1
  • C1_0、C2_0、C3_0:该扇区的 block 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com