Android 如何永久锁定MIFARE Ultralight C标记中的特定数据页?

Android 如何永久锁定MIFARE Ultralight C标记中的特定数据页?,android,nfc,access-control,mifare,lockbits,Android,Nfc,Access Control,Mifare,Lockbits,我已经成功地在数据页30到38中写入了一些数据 之后,我想锁定这些页面,以防止进一步的写作。写锁应该是永久性的,因此即使有人知道身份验证密钥,他们也不能写入这些页面 就我对数据表的理解而言,我必须在OTP页面上写一些内容。但是我不完全理解我必须发送什么命令来锁定第30到38页 有人能帮我确定需要发送到卡的命令吗?我的想法是我必须在第40页写F0。但是,这也可能会使第28、29和39页被锁定,因此无法使用。如何永久锁定第30至38页? 为了设置包括第30页到第38页的锁定位,需要设置位于第40页字

我已经成功地在数据页30到38中写入了一些数据

之后,我想锁定这些页面,以防止进一步的写作。写锁应该是永久性的,因此即使有人知道身份验证密钥,他们也不能写入这些页面

就我对数据表的理解而言,我必须在OTP页面上写一些内容。但是我不完全理解我必须发送什么命令来锁定第30到38页

有人能帮我确定需要发送到卡的命令吗?我的想法是我必须在第40页写F0。但是,这也可能会使第28、29和39页被锁定,因此无法使用。

如何永久锁定第30至38页? 为了设置包括第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 */
});
但是,嘿,我不想锁定第28、29和39页!我怎么能只锁定第30到38页? 不幸的是,你不能!MIFARE Ultralight C用于第16页至第39页的锁定机制以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页的写保护。

谢谢。你能告诉我第40页第0字节第4位的用法吗。Michael Manual说,文档中说这是针对第29-39页的块锁定,这就是为什么我考虑设置位4,5,6,7[结果是F0]。“设置块锁定位后,相应内存区域的锁定配置将冻结。”请帮助我输入有关块锁定位的itAny注释。我是否应该将其设置为true?请参阅我的编辑。这取决于你想要实现什么。谢谢迈克尔。在这种情况下,我必须阻止从30到38的连续页面(由于支持的配置,实际是28到39),因此这意味着设置E0或F0不会产生太大的差异。我可能会和F0一起去。谢谢