如何永久锁定 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.