如何永久锁定 MIFARE Ultralight C 标签中的特定数据页?
How do I permanently lock specific data pages in a MIFARE Ultralight C tag?
我已经成功地在数据页30到38上写入了一些数据。
之后我想锁定那些页面以防止进一步写入。写锁应该是永久性的,所以即使有人知道身份验证密钥,他们也不应该能够写入这些页面。
据我了解数据表,我必须在 OTP 页面上写一些位。但是我不完全明白我必须发送什么命令来锁定第 30 到 38 页。
有人可以帮我确定需要发送到卡上的命令吗?我的想法是我必须在第 40 页上写 F0。但是,这也可能使第 28、29 和 39 页被锁定,因此无法使用。
如何永久锁定第 30 到 38 页?
为了设置包含第 30 页到第 38 页的锁定位,您需要设置位于第 40 页字节 0 的第 5、6 和 7 位的锁定位。您可以这样做这与 WRITE 命令。对于锁定位(或任何 OTP 页),此命令将仅对在命令的数据参数中设置为“1”的那些位进行编程(基本上导致逻辑或)。请注意,WRITE 命令始终将一整页(即 4 个字节)作为其数据参数:
byte[] result = nfcA.transceive(new byte[] {
(byte)0xA2, /* CMD = WRITE */
(byte)0x28, /* PAGE = 40 */
(byte)0xE0, (byte)0x00, (byte)0x00, (byte)0x00 /* DATA = lock pages 28..39 */
});
但是,嘿,我不想锁定第 28、29 和 39 页!我怎样才能只 锁定第 30 到 38 页?
很遗憾,你不能!第 16 至 39 页的 MIFARE Ultralight C 锁定机制以 4 页为一组进行组织。因此,您只能锁定以下 4 组页面:
- 第 16..19 页
- 第 20..23 页
- 第 24..27 页
- 第 28..31 页
- 第 32..35 页
- 第 36..39 页
块锁定位有什么作用?
块锁定位为锁定页内的位设置写保护。因此,例如,如果第 28 到 39 页的块锁定位设置为“1”,这意味着您不能更改这些页面的三个锁定位的状态。因此,如果您设置了第 28 至 31 页的锁定位,但未设置第 32 至 35 页和第 36 至 39 页的锁定位,然后设置块锁定位,则无法再激活第 32 页的写保护到 39.
我已经成功地在数据页30到38上写入了一些数据。
之后我想锁定那些页面以防止进一步写入。写锁应该是永久性的,所以即使有人知道身份验证密钥,他们也不应该能够写入这些页面。
据我了解数据表,我必须在 OTP 页面上写一些位。但是我不完全明白我必须发送什么命令来锁定第 30 到 38 页。
有人可以帮我确定需要发送到卡上的命令吗?我的想法是我必须在第 40 页上写 F0。但是,这也可能使第 28、29 和 39 页被锁定,因此无法使用。
如何永久锁定第 30 到 38 页?
为了设置包含第 30 页到第 38 页的锁定位,您需要设置位于第 40 页字节 0 的第 5、6 和 7 位的锁定位。您可以这样做这与 WRITE 命令。对于锁定位(或任何 OTP 页),此命令将仅对在命令的数据参数中设置为“1”的那些位进行编程(基本上导致逻辑或)。请注意,WRITE 命令始终将一整页(即 4 个字节)作为其数据参数:
byte[] result = nfcA.transceive(new byte[] {
(byte)0xA2, /* CMD = WRITE */
(byte)0x28, /* PAGE = 40 */
(byte)0xE0, (byte)0x00, (byte)0x00, (byte)0x00 /* DATA = lock pages 28..39 */
});
但是,嘿,我不想锁定第 28、29 和 39 页!我怎样才能只 锁定第 30 到 38 页?
很遗憾,你不能!第 16 至 39 页的 MIFARE Ultralight C 锁定机制以 4 页为一组进行组织。因此,您只能锁定以下 4 组页面:
- 第 16..19 页
- 第 20..23 页
- 第 24..27 页
- 第 28..31 页
- 第 32..35 页
- 第 36..39 页
块锁定位有什么作用?
块锁定位为锁定页内的位设置写保护。因此,例如,如果第 28 到 39 页的块锁定位设置为“1”,这意味着您不能更改这些页面的三个锁定位的状态。因此,如果您设置了第 28 至 31 页的锁定位,但未设置第 32 至 35 页和第 36 至 39 页的锁定位,然后设置块锁定位,则无法再激活第 32 页的写保护到 39.