Android 在Mifare Ultralight C上限制写入时读取

Android 在Mifare Ultralight C上限制写入时读取,android,authentication,nfc,rfid,mifare,Android,Authentication,Nfc,Rfid,Mifare,我刚刚收到Mifare Ultralight C。我可以使用android手机(Galaxy Ace 3)轻松读取其中的值 然后我将第43页中的值更改为0x80,将第42页中的值更改为0x2A。现在,当我以这种方式读取值时: Log.e(LOG, "read"); for(int j = 0; j <= 40; j += 4){ byte[] resp = mifare.readPages(j); logResponse(j, resp); private void logRespon

我刚刚收到Mifare Ultralight C。我可以使用android手机(Galaxy Ace 3)轻松读取其中的值

然后我将第43页中的值更改为
0x80
,将第42页中的值更改为
0x2A
。现在,当我以这种方式读取值时:

Log.e(LOG, "read");
for(int j = 0; j <= 40; j += 4){
byte[] resp = mifare.readPages(j);
logResponse(j, resp);


private void logResponse(int j, byte[] resp){
     for(int i = 0; i < resp.length; i += 4){
            Log.e(LOG, String.valueOf(j + i / 4) + " hex: " 
                    + String.format("%02x ", resp[i])
                    + String.format("%02x ", resp[i + 1]) 
                    + String.format("%02x ", resp[i + 2]) 
                    + String.format("%02x", resp[i + 3]));
      }
}
Log.e(Log,“read”);

对于(int j=0;j您从标记中读取的内容看起来确实可能是MIFARE Ultralight C标记(尤其是您能够读取第42页和第43页)

  • 将AUTH0设置为42(0x2A)后看到的翻滚是预期行为。即,从第X页开始保护标记内存时,READ命令将在第X-1页后翻滚

  • 将AUTH1设置为0x80不会达到预期效果。只有AUTH1中的最低位是相关的,因此通常将AUTH1设置为0x00(限制读写)或0x01(限制只写)

  • 不过,我不太清楚身份验证命令失败的原因

    byte[] cmd = { (byte)0x1A, (byte)0x00 };
    byte[] result = mifare.transceive(cmd);
    
    通常,如果此命令返回除0xAF以外的任何内容(或引发异常),则表明标记不是MIFARE Ultralight C


刚刚测试了AUTH1值,你是对的,我的错误。它限制了正确的读/写,但验证命令有问题,这真的很奇怪。说清楚,我使用MifareUltralight作为mifare对象,可以吗?MifareUltralight和NfcA都可以。你在0x1A字节后发送零字节,对吗?还有在发送身份验证命令之前,您使用了哪些操作?您是否正在执行任何读/写操作?我的命令与您的帖子中的命令完全相同。此命令之前仅使用connect()。我也尝试过使用read before auth命令,相同的行为。您是否可以尝试使用NFC TagInfo读取标记(我的或NXP的,应该不重要)并检查它报告的标签类型?这真的很奇怪。你确定这些是NXP制造的真正标签吗?通常对于NXP的标签,我更相信NXP的TagInfo应用程序的结果,而不是我的。因此它实际上可能是NTAG203。关于NFC TagInfo的结果:
byte[] cmd = { (byte)0x1A, (byte)0x00 };
byte[] result = mifare.transceive(cmd);