android - Mifare Ultralight C 锁

标签 android nfc mifare lockbits

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

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

最佳答案

我正在尝试将 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用于锁位的编码。

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

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

关于android - Mifare Ultralight C 锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26407591/

相关文章:

java - 当我非常靠近地点击图片时,文本被识别。它甚至无法识别名片上的文字

ios - MIFARE 只读和写保护 block 同时?

java - 读取 NfcA MifareClassic NFC 标签

authentication - Mifare 认证

android - 与 ISO/IEC14443-3a(Layer3 exchange)通信,用于 NFC 交换 Mifare Plus 卡

android - Activity 完成后,onActivityResult() 的 Intent 数据为 null

android - 在android中,如何在代码中设置layout_marginRight

android - Spinner - 适配器为空时显示提示

android - 如何在android中读取NFC中的URL

android - 如何访问使用 MIFARE 应用程序目录结构的 MIFARE Classic 卡?