Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Чтение карт c NFC

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

VasyOK



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день.
Реализуем проект транспортных карт и в качестве ридера разворачиваю мобильное приложение под Android в стеке Cordova + NFC Plugin.
 
Карты формата Mifare Classic. Ключи A и B: FFFFFFFFFFFF
 
Никак не могу понять, как авторизироваться и прочитать данные из 1-го сектора 0-го блока. Пытаюсь читать их следующим образом:  
 

Код:
 
try {
        await window.nfc.connect('android.nfc.tech.MifareClassic', 500);
    } catch (error) {
        alert('Ошибка подключения: ' + error);
    } finally {
        window.nfc.transceive('60 FF FF FF FF FF FF').then(
            response => alert('Результат авторизации: ' + util.arrayBufferToHexString(response)),
            error    => alert('Ошибка авторизации: ' + error)
        );
        window.nfc.transceive('30 00 01').then(
            response => alert('Считанные данные: ' + util.arrayBufferToHexString(response)),
            error    => alert('Ошибка чтения данных: ' + error)
        )
        await window.nfc.close();
        alert('Чтение завершено');
    }
 

 
По идее,  window.nfc.transceive('60 FF FF FF FF FF FF') - это авторизациия, но получаю ошибку transceived error
А window.nfc.transceive('30 00 01') возвращает данные из 3-го сектора 0-го блока.
 
Куда копать и что я делаю не так?)

Всего записей: 403 | Зарегистр. 13-12-2003 | Отправлено: 10:39 16-03-2021
MERCURY127



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Endianness не перепутали?

Всего записей: 11563 | Зарегистр. 03-08-2008 | Отправлено: 11:03 16-03-2021
VasyOK



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MERCURY127
Если ты про window.nfc.transceive('60 FF FF FF FF FF FF')
Как я понял из доков и разных примеров, первым идет код команды , для карт Mifare Classic код команды авторизации key A - 60. После идет сам ключ

Всего записей: 403 | Зарегистр. 13-12-2003 | Отправлено: 11:35 16-03-2021
MERCURY127



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А что вернут window.nfc.transceive('10 00 01') и window.nfc.transceive('20 00 01')

Всего записей: 11563 | Зарегистр. 03-08-2008 | Отправлено: 11:58 16-03-2021
VasyOK



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MERCURY127
window.nfc.transceive('10 00 01') и window.nfc.transceive('20 00 01') тоже возвращают данные из 3-го сектора 0-го блока.
Ощущение, что без авторизации он по умолчанию возвращает их.

Всего записей: 403 | Зарегистр. 13-12-2003 | Отправлено: 15:00 16-03-2021
MERCURY127



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
увы, тогда я не знаю, чем помочь.  
я когда то делал себе читалку нфц на ардуине, и запомнилось, что в моем случае байты надо было слать в обратном порядке...

Всего записей: 11563 | Зарегистр. 03-08-2008 | Отправлено: 15:07 16-03-2021
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
VasyOK
https://www.nxp.com/docs/en/data-sheet/MF1S50YYX_V1.pdf

Цитата:
Before any memory operation can be done, the card has to be selected and
authenticated as described in Section 8.2. The possible memory operations for an
addressed block depend on the key used during authentication and the access
conditions stored in the associated sector trailer.

 

Цитата:
Depending on the access bits for data blocks (blocks 0...2) the read/write access is
specified as ‘never’, ‘key A’, ‘key B’ or ‘key A|B’ (key A or key B). The setting of the
relevant access bits defines the application and the corresponding applicable commands.
• Read/write block: the operations read and write are allowed.
• Value block: Allows the additional value operations increment, decrement, transfer
and restore. With access condition ‘001’ only read and decrement are possible which
reflects a non-rechargeable card. For access condition ‘110’ recharging is possible by
using key B.
• Manufacturer block: the read-only condition is not affected by the access bits setting!
• Key management: in transport configuration key A must be used for authentication
 

 
60h - да, авторизация ключом A

Цитата:
Authentication with Key A - 60h

 
но как и сказали, байты в обратном порядке, судя по
https://stackoverflow.com/questions/12011726/reading-block-from-mifare-classic-using-javax-smartcardio/28253533#28253533
не знаю, делает ли так window.nfc.transceive

Всего записей: 15108 | Зарегистр. 20-09-2014 | Отправлено: 04:28 17-03-2021
VasyOK



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
 
 

Цитата:
 
the Authentication Command Authenticate sector 0 using that key as key A (60):
FF 86 0000 05 01 0000 60 00
 

 
Уже  что только не перепробовал, но как и куда сюда подставить мой A ключ: FF FF FF FF FF FF и авторизоваться в 1-м секторе?
 

Цитата:
 
Using this command You can read data from Sector 0 block 1
 
byte[] readFromPage = new byte[10];
readFromPage = new byte[] { (byte) 0xFF, (byte) 0x00, (byte) 0x00,
 (byte) 0x00, (byte) 0x05, (byte) 0xD4, (byte) 0x40,
 (byte) 0x00, (byte) 0x30, (byte) 0x01 };
 

 
Иными словами, читаем сектор 0 блок 1 командой FF 00 00 00 05 D4 40 00 30 01
В моем случае наоборот должен быть сектор 1, блок 0.
 
How??)
 
Сторонним приложением прочитал информацию с карты и выглядит она вот так https://insistec.ru/604f074b4a2cf267573089.jpeg

Всего записей: 403 | Зарегистр. 13-12-2003 | Отправлено: 18:17 17-03-2021 | Исправлено: VasyOK, 18:33 17-03-2021
MERCURY127



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Может, ключ А у вас не -1, а 0?

Всего записей: 11563 | Зарегистр. 03-08-2008 | Отправлено: 18:49 17-03-2021
VasyOK



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Хм. Спецы, которые записывали карты, указали что ключ А: FF FF FF FF FF FF
 
Но то, что записано в сектор 3 напоминает Ключи А и B. И похоже, что ключ А: 00 00 00 00 00 00.
 
Но опять же вопрос, какими должны быть команды ?

Всего записей: 403 | Зарегистр. 13-12-2003 | Отправлено: 20:27 17-03-2021
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
VasyOK

Цитата:
Но то, что записано в сектор 3 напоминает Ключи А и B

у каждого сектора свой набор ключей, хранящихся в 3 блоке данных.
   
проверьте еще биты доступа.
 
далее - вы пытаетесь авторизоваться используя ключ А (так как 60h), но передаете при этом ключ B (его авторизация 61h)

Всего записей: 15108 | Зарегистр. 20-09-2014 | Отправлено: 20:34 17-03-2021
VasyOK



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я не могу понять какими должны быть конечные команды для авторизации и чтения необходимого мне сектора и блока (

Всего записей: 403 | Зарегистр. 13-12-2003 | Отправлено: 20:44 17-03-2021
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
VasyOK

Цитата:
Я не могу понять какими должны быть конечные команды для авторизации

если вы используете ключ B, то и указывать должны что идет авторизация с его помощью, то есть 61h, а не 60h.
дал же ссылку на документацию, читайте 8.2 раздел.
там описано на низком уровне, ваш фреймворк, очевидно, какие то вещи делает сам - включая расшифровку полученных данных (так как обмен идет зашифрованный).
чтобы понять какие операции вы можете делать - нужно еще изучать биты доступа.
 
+ https://developer.android.com/reference/android/nfc/tech/MifareClassic
возможно вам не нужно авторизоваться посылая RAW команду.
authenticateSectorWithKeyA
authenticateSectorWithKeyB
либо библиотека это делает уже за вас.
 
+ https://www.npmjs.com/package/cordova-md-nfc#sample-projects
смотреть примеры, читать описание работы

Всего записей: 15108 | Зарегистр. 20-09-2014 | Отправлено: 20:58 17-03-2021 | Исправлено: Mavrikii, 21:20 17-03-2021
VasyOK



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вопрос остается открыт. Если все-таки кто-то сможет написать какими должны быть команды в моем случае, буду очень благодарен)

Всего записей: 403 | Зарегистр. 13-12-2003 | Отправлено: 10:36 20-03-2021
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Чтение карт c NFC


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru