我已经成功地在数据页 30 到 38 上写入了一些数据。
之后,我想锁定这些页面以防止进一步写入。写锁应该是永久的,因此即使有人知道身份验证密钥,他们也不应该能够写入这些页面。
据我了解数据表,我必须在 OTP 页面上写一些位。但我不完全明白我必须发送什么命令来特别锁定第 30 到 38 页。
有人可以帮我确定需要发送到卡的命令吗?我的想法是我必须在第 40 页上写 F0。但是,这也可能使第 28、29 和 39 页被锁定,因此无法使用。
我已经成功地在数据页 30 到 38 上写入了一些数据。
之后,我想锁定这些页面以防止进一步写入。写锁应该是永久的,因此即使有人知道身份验证密钥,他们也不应该能够写入这些页面。
据我了解数据表,我必须在 OTP 页面上写一些位。但我不完全明白我必须发送什么命令来特别锁定第 30 到 38 页。
有人可以帮我确定需要发送到卡的命令吗?我的想法是我必须在第 40 页上写 F0。但是,这也可能使第 28、29 和 39 页被锁定,因此无法使用。
为了设置包括第 30 到 38 页的锁定位,您需要设置位于第 40 页字节 0 的第 5、6 和 7 位的锁定位。您可以使用 WRITE 命令执行此操作. 对于锁定位(或任何 OTP 页),此命令将仅对在命令的数据参数中设置为“1”的位进行编程(本质上导致逻辑 OR)。请注意,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 */
});
不幸的是,你不能!MIFARE Ultralight C 的第 16 至 39 页的锁定机制以 4 页为一组进行组织。因此,您只能锁定以下 4 个页面组:
块锁定位设置锁定页内的位的写保护。因此,例如,如果第 28 到 39 页的块锁定位设置为“1”,这意味着您无法更改这些页面的三个锁定位的状态。因此,如果您设置了第 28 至 31 页的锁定位,但未设置第 32 至 35 和 36 至 39 页的锁定位,然后再设置块锁定位,您将无法再激活第 32 页的写保护到 39。