Как я могу выполнить аутентификацию и чтение данных с карты MIFARE Classic, которая отформатирована в структуре каталога приложений MIFARE? Я использую Android.Как получить доступ к карте MIFARE Classic, которая использует структуру каталога приложений MIFARE?
Q
Как получить доступ к карте MIFARE Classic, которая использует структуру каталога приложений MIFARE?
0
A
ответ
5
См. Примечание по применению NXP на MIFARE Application Directory. Как правило, для того, чтобы считывать данные с карты Mifare Classic, что делает использование MAD, вы могли бы сделать что-то вроде следующего:
- Authenticate в секторе 0 (MAD сектора) с помощью клавиш A
A0 A1 A2 A3 A4 A5
(чтение общественности MAD ключ). - Чтение блока 3.
- На основе общей purpse байт (байт 9 чтения из блока 3), можно определить,
- если карта использует MAD (бит 7 = 1),
- , если карта поддерживает несколько приложений (бит 6 = 1) и
- версия MAD (бит 1-0).
прочитанной блоки 1 и 2, эти блоки имеют следующий формат (где
AIDx
является идентификатор приложения присвоен номер сектора х):+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+ Byte | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+ Block 1 |CRC |INFO| AID01 | AID02 | AID03 | AID04 | AID05 | AID06 | AID07 | +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+ Block 2 | AID08 | AID09 | AID10 | AID11 | AID12 | AID13 | AID14 | AID15 | +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
Убедитесь, что CRC (блок 1, байт 0).
- Просмотрите список AID (полученный из данных блоков 1 и 2), чтобы найти ваши AID-приложения приложения (и, следовательно, найти сектора, которые содержат данные вашего приложения).
Если используется версия MAD 2, выполните аутентификацию в секторе 16 и прочитайте блоки 0 (64), 1 (65) и 2 (66), чтобы получить расширенный список AID. Формат этих блоков:
+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+ Byte | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+ Block 0 |CRC |INFO| AID17 | AID18 | AID19 | AID20 | AID21 | AID22 | AID23 | +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+ Block 1 | AID24 | AID25 | AID26 | AID27 | AID28 | AID29 | AID30 | AID31 | +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+ Block 2 | AID32 | AID33 | AID34 | AID35 | AID36 | AID37 | AID38 | AID39 | +----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+
Аутентифицировать секторам вашего приложения (в открытых по списку AID) и чтения/записи данных вашего приложения.
Привет, Майкл, спасибо за ваш ответ, мне немного помогло, я в порядке, пока не получу номер (6) в вашем ответе, данные, возвращаемые функцией readBlock(), являются байтом [ ], поэтому мои вопросы: - как «просмотреть» через список AID? У вас есть пример кода? –
@Eagle_one Вы прочитали [примечание к приложению] (http://www.nxp.com/documents/application_note/AN10787.pdf), которое я связал в сообщении? Раздел 3.6, таблицы 9 и 10 показывают формат списка AID. –
Hi @MichaelRoland Я сделал программу на Java (Android), которая оборачивается через оба сектора и их блоки, дело в том, что я получаю некоторые строки нормальными, но другие нет, когда я спросил производителя карты, они сказали, что вы должны прочитать эти значения как HEX not как строка, и там, где она останавливается, потому что я возвращаю байт-массивы, и если я прочитаю их как HEX, они приведут пример нежелательных данных: –