2015-02-17 2 views
0

В настоящее время я использую NFC-экран Seeed Studio v2 и Arduino Uno R3. Вот код из эскиза, который я использую для чтения. Он основан на примере представленной библиотеки Seeed студии Android hçe:NFC Reader не может прочитать данные эмуляции зашифрованных карт

void loop() { 
    ... 
    uint8_t response[510]; 
    uint8_t responseLen = sizeof(response); 
    success = nfc.inDataExchange(selectApdu, sizeof(selectApdu), 
       response, &responseLen); 

    if(success) { 
     Serial.print("Response Length: "); Serial.println(responseLen); 
     // nfc.PrintHexChar(response, responseLen); 
     printResponse(response, responseLen); 
    } else Serial.println("Failed sending SELECT AID"); 
    } else Serial.println("Didn't find anything!"); 
    delay(1000); 
} 

На Android приложение, которое у меня есть, я простирающийся пример HCE Android разработчика путем добавления цифровых подписей и шифрования AES. Я знаю, что приложение читается, если я не добавляю шифрование AES и могу проверить содержимое с помощью скрипта Python. Когда я добавлю шифрование, Arduino ничего не читает из приложения, даже если устройство Android выводит журналы, которые показывают, что APDU был запрошен.

Там, кажется, два виновники:

  1. Response[510] не является правильным размером.
  2. Зашифрованные данные, отправляемые в Arduino, слишком велики.

Я изменил Response[] различных значения, такие как 80, 1022, 2046, 8196, и т.д. Однако, чем выше значение, тем больше волновались Ардуин становится. Слишком мало значения, и ничего не происходит. 510 кажется магическим числом. Я вошел граф длина моих передаваемых данных:

  • Без шифрования AES, длина данных была 197 bytes, которые выводятся отлично на последовательной консоли Arduino.
  • С шифрованием AES длина данных была 268 bytes и привела к выходу «Failed send SELECT AID», что является ложной ошибкой, так как я смог получить запрос AID и заголовок APDU.

Какая проблема и как я могу ее исправить или по крайней мере иметь обходное решение?


UPDATE: Если бы я, чтобы сделать данные отправляются менее 245 байт, то Arduino будет выводить данные по последовательной консоли. Как только он сделал это 246 байт, он выходит из строя и выводит «Ошибка отправки SELECT AID».

ответ

0

Я до сих пор не знаю, как обойти это «ограничение» на Arduino, но я нашел обходное решение. Ключ должен содержать данные менее 245 bytes.

Что я сделал, вместо того, чтобы шифровать как данные, так и подпись вместе, я решил просто зашифровать данные и добавить подпись в конец данных вместе с чем-то, что я могу использовать для разграничения (т.е. "::").

Эта комбинация привела к итогу 206 bytes, и она считывается и передается как последовательные данные в мой сценарий Python.

 Смежные вопросы

  • Нет связанных вопросов^_^