Mifare Ultralight C锁

时间:2014-10-16 14:58:55

标签: android nfc mifare lockbits

我正在尝试锁定Mifare Ultralight C标签。我想将NDEF页面0x04设置为0x27为只读。我认为这可以通过Ndef.makeReadonly()实现。

此外,我想将页面0x29设置为0x2F以进行密码保护(用于读取和写入),因此只有在身份验证成功后才能访问它们。我很难理解需要在锁定字节(页面0x28,字节0,1)中设置哪些字节,以及是否需要设置扇区0x2A和0x2B。

1 个答案:

答案 0 :(得分:3)

我正在尝试将NDEF页面0x04设置为0x27以进行只读。我认为这可以通过Ndef.makeReadonly()实现。

不一定,Ndef.makeReadonly()可能只在功能容器中设置只读标志(根据NFC论坛类型2标签操作规范)。

如果要确保设置实际的锁定位,可以将标记连接为NfcAMifareUltralight标记技术,然后发出锁定位的写入命令。

NfcA nfcA = NfcA.get(tag);
nfcA.connect();

byte[] result1 = nfcA.transceive(new byte[] {
    (byte)0xA2,  /* CMD = WRITE */
    (byte)0x02,  /* PAGE = 2    */
    (byte)0x00, (byte)0x00, (byte)0xFF, (byte)0xFF  /* DATA = lock pages 3..15 */
});

byte[] result2 = nfcA.transceive(new byte[] {
    (byte)0xA2,  /* CMD = WRITE */
    (byte)0x28,  /* PAGE = 40   */
    (byte)0x0F, (byte)0x00, (byte)0x00, (byte)0x00  /* DATA = lock pages 16..27 */
});

另请参阅Mifare Ultralight: lock specific pages了解lockbits的编码。

我想将页面0x29设置为0x2F以进行密码保护(用于读取和写入),因此只有在身份验证成功后才能访问它们。

使用我上面显示的write命令,您首先要将您的身份验证密钥写入44..47页。然后,您将AUTH1(第43页)写为全零。最后,您将AUTH0(第42页)写为0x29 0x00 0x00 0x00,以要求对页面41及更高版本进行身份验证。实际上我建议锁定40页以上的页面,以便没有人可以为这些页面设置锁定位。或者,您可以设置块锁定位(即将0x1F 0x0F 0x00 0x00写入第40页),以便无法更改未锁定页面的锁定位。