Как читать двоичные блоки карты mifare?
Я разрабатываю приложение, которое читает карту NFC от читателя. Я знаю код для чтения двоичного блока, как это:
FF B0 00 04 10
04 для блока 4 и 10 для 16 байтов данных. Моя карта имеет данные "TEST009996". Я запускаю 5 кодов для чтения двоичных блоков из 4-8 следующим образом:
FF B0 00 04 10
FF B0 00 05 10
FF B0 00 06 10
FF B0 00 07 10
FF B0 00 08 10
Я получил следующий результат:
T☻enTEÉ ☺
T☻enTEST00É
T☻enTEST009996É
enTEST009996■ 6É
ST009996■ 6 É
или в шестнадцатеричном:
01 03 A0 10 44 03 11 D1 01 0D 54 02 65 6E 48 43 90 00
44 03 11 D1 01 0D 54 02 65 6E 48 43 49 44 30 30 90 00
01 0D 54 02 65 6E 48 43 49 44 30 30 39 39 39 36 90 00
65 6E 48 43 49 44 30 30 39 39 39 36 FE 00 00 36 90 00
49 44 30 30 39 39 39 36 FE 00 00 36 00 00 00 00 90 00
Должен ли я создать алгоритм, чтобы сократить результат, чтобы получить данные? есть ли лучшие способы?
Источник:
1 ответ
Таким образом, кажется, что ваш тег - это тег NFC Forum Type 2 (см. Спецификацию операции с тегом NFC Forum Type 2 на веб-сайте NFC Forum). При упоминании MIFARE это может быть, например, тег MIFARE Ultralight, MIFARE Ultralight C или NTAG.
Блок тега типа 2 состоит из 4 байтов. Команда чтения читает 4 блока одновременно. Таким образом, команда чтения дает вам 4 блока (по 4 байта каждый), начиная с заданного смещения блока, плюс слово состояния для команды чтения (0x9000
для успеха). В вашем случае вы получите
Read(4, 16): 0103A010 440311D1 010D5402 656E4843 9000
Read(5, 16): 440311D1 010D5402 656E4843 49443030 9000
Read(6, 16): 010D5402 656E4843 49443030 39393936 9000
Read(7, 16): 656E4843 49443030 39393936 FE000036 9000
Read(8, 16): 49443030 39393936 FE000036 00000000 9000
Следовательно, память вашего тега выглядит так:
0103A010
440311D1
010D5402
656E4843
49443030
39393936
FE000036
00000000
Тег типа 2 (между прочим, чтобы убедиться, что этот тег действительно соответствует спецификации операции тега типа 2, вам также необходимо прочитать контейнер возможностей, который находится в блоке 3), содержит серию значений длины тега (TLV) структуры:
01 (Tag: Lock Control TLV)
03 (Length: 3 bytes)
A0 10 44 (Value: Information on position and function of lock bytes)
03 (Tag: NDEF Message TLV)
11 (Length: 17 bytes)
D1010D5402656E48434944303039393936 (Value: NDEF message)
FE (Tag: Terminator TLV; has no length field)
Таким образом, ваш тег содержит сообщение NDEF
D1010D5402656E48434944303039393936
Это переводится как
D1 (Header byte of record 1)
- Message begin is set (= first record of an NDEF message)
- Message end is set (= last record of an NDEF message)
- Short record flag is set (= Payload length field consists of 1 byte only)
- Type Name Format = 0x1 (= Type field contains an NFC Forum well-known type)
01 (Type length: 1 byte)
0D (Payload length: 13 bytes)
54 (Type: "T")
02656E48434944303039393936 (Payload field)
Поле полезной нагрузки текстовой записи форума NFC декодируется следующим образом:
02 (Status byte: Text is UTF-8 encoded, Language code has a length of 2 bytes)
656E (Language code: "en")
48434944303039393936 (Text: "TEST009996")