2015-10-13 7 views
0

Я пытаюсь установить и проверить пароль в теге NFC (тип: NTAG213), но я всегда получаю IOException (Transceive failed), когда я пытаюсь установить его.Установка пароля для NTAG213

Я не понимаю, на какой странице я должен установить пароль и пакет ACK. Это мой код, написанный на C# с Xamarin. Пожалуйста, не стесняйтесь отвечать на собственный код Java Java.

var tag = intent.GetParcelableExtra (NfcAdapter.ExtraTag) as Tag; 

String password = "pass"; 
byte[] array = System.Text.Encoding.ASCII.GetBytes (password); 
MifareUltralight mifare = MifareUltralight.Get (tag); 
mifare.Connect(); 

byte[] result1 = mifare.Transceive(new byte[] { 
     (byte)0xA2, /* CMD = WRITE */ 
     (byte)0x2C, /* PAGE = 44 */ 
     array[0], array[1], array[2], array[3] 
}); 

byte[] result2 = mifare.Transceive(new byte[] { 
     (byte)0xA2, /* CMD = WRITE */ 
     (byte)0x2A, /* PAGE = 42 */ 
     (byte)array[0], (byte)array[1], (byte)0, (byte)0 
}); 

ответ

2

С NTAG213, правильные страницы для пароля (PWD) и пароль подтверждения (ПАК) являются:

  • PWD: 43 (0x2B)
  • ПАКЕТ: 44 (0x2C)

Следовательно, вы пытаетесь написать неверные страницы. Более конкретно, вы пытаетесь записать ненулевые значения в байты RFUI (стр. 44, байты 2-3 и стр. 42, байты 1-3), что может привести к сбою операций записи.

Таким образом, вы, как правило, хотят, чтобы сделать omething так:

byte[] pwd = new byte[] { (byte)0x70, (byte)0x61, (byte)0x73, (byte)0x73 }; 
byte[] pack = new byte[] { (byte)0x98, (byte)0x76 }; 

// write PACK: 
byte[] result = mifare.Transceive(new byte[] { 
     (byte)0xA2, /* CMD = WRITE */ 
     (byte)0x2C, /* PAGE = 44 */ 
     pack[0], pack[1], 0, 0 
}); 

// write PWD: 
result = mifare.Transceive(new byte[] { 
     (byte)0xA2, /* CMD = WRITE */ 
     (byte)0x2B, /* PAGE = 43 */ 
     pwd[0], pwd[1], pwd[2], pwd[3] 
}); 

Обратите внимание, что это не имеет особого смысла, чтобы позволить ПАКЕТ подмножество PWD, поскольку злоумышленник затем сможет получить значение ПАК от значения PWD. Значение PACK обычно используется как общий секрет, который только вы и тег «знаете», и что тег отправляется в ответ на успешную попытку аутентификации, чтобы доказать, что он является подлинным тегом. (Хотя при таком подходе имеется довольно много проблем с безопасностью.)

Обратите внимание, что установка значений PWD/PACK не будет выполнена (возможно, с IOException), если тег уже защищен (набор паролей и настройка аутентификации установлены на защитите PWD/PACK). В таких случаях сначала необходимо выполнить аутентификацию с помощью текущего пароля.

+0

Благодарим за быстрый ответ. Я сделал это, и программа не произошла в исключении, но, используя приложение NFC Tools для проверки состояния nfc, оно позволяет мне писать текущий тег, который должен быть защищен паролем. Как это возможно?! – lukaspp

+1

Установка пароля недостаточно для защиты тега, вам необходимо настроить страницы конфигурации, чтобы фактически защитить тег. –

+0

Как настроить страницы конфигурации? – lukaspp