2017-01-05 14 views
1

Я использую библиотеку pcsc-sharp для связи с ACR122U Reader для чтения/записи информации для карт Mifare Classic 1k.pcsc-sharp Mifare Authentication

После ознакомления с библиотекой и концепцией APDU я могу использовать UID в качестве идентификатора в своих приложениях. Теперь мне нужно установить свои собственные идентификаторы на карту. Поэтому я прочитал несколько руководств по MIFARE NXP (например, http://cache.nxp.com/documents/data_sheet/MF1S70YYX_V1.pdf?pspll=1), а также получил некоторую информацию об ISO 7816-4 (http://www.cardwerk.com/smartcards/smartcard_standard_ISO7816-4_6_basic_interindustry_commands.aspx). Я знаю, что нужно выполнить аутентификацию перед доступом к памяти карт для выполнения операций чтения/записи, и я знаю стандартное значение ключа.

Я загрузил примеры pcsc-sharp из GitHub и выполнил пример Mifare1kTest. Я работаю, но card.LoadKey в строке 36 терпит неудачу. Ответные значения команды Apdu в LoadKey - SW1 = 99 SW2 = 0, которые я не могу найти ни в одной документации. Комментируя раздел «throw new Exception», этот пример работает.

Мой вопрос теперь в том, какие значения являются правильными, чтобы перейти к Card.LoadKey, соответственно, которые являются правильными значениями, которые будут использоваться для параметров в команде Apdu. Что означает «keynumber» (Sectornumber - Sector/Block Combination)? Нужен ли вызов LoadKey, если пример работает ...?

Любая помощь apreciated

С наилучшими пожеланиями

Matthias

+0

Обычно что-либо в диапазоне 9xxx означает успех, при этом xxx является дополнительной информацией. Если я правильно помню, APDU-wrap будет помещать ответ MiFare в слово состояния (но эй, я запрограммировал интерфейс за один день, год назад, мой ум уже не такой молодой). Вы пытались, если ключ был успешным, используя ключ? –

+0

Ключ должен быть загружен в ** volatile ** часть памяти считывателей. Пример «Руки над» KeyStructure, NonVolalatileMemory. Выполнение так, как описано ** Mr Heart ** в ответе ниже примера работает. Результаты для SW1/SW2 равны 90 00. Большое спасибо. –

ответ

1

Ваш вопрос широк, но они должны работать для вас. Код объясняется с комментариями

   var loadKeySuccessful = card.LoadKey(
        KeyStructure.VolatileMemory, 
        0x00, // first key slot 
        new byte[] {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF} // key 
        ); 
+0

Спасибо за ваш ответ. Ты прав. загрузка ключа в ** энергозависимую память ** решила проблему. Он также описан в Руководстве по программированию приложений ACR122U, но так или иначе я его пропустил. –

+0

@MatthiasFuchs, если это правильный ответ, отметьте его как правильное, чтобы помочь другим людям искать решения. –