В настоящее время я использую 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 был запрошен.
Там, кажется, два виновники:
Response[510]
не является правильным размером.- Зашифрованные данные, отправляемые в 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».