Записать данные на смарт-карту в файле StdData

Я создал файл на смарт-карте с помощью этой команды apdu:

String apdu = "90CD00000700000E0EA0000000"; channel.transmit(new CommandAPDU(DatatypeConverter.parseHexBinary(apdu)));

файл успешно создан, однако я не могу записать данные в этот файл, я попробовал эту команду:String apdu = "903D00003B00000000000034" + data + "00";

но это не удалось с ответом: sw1 91 sw2 BE (вне границы)

в чем проблема с этим файлом?

1 ответ

Решение

Команды DESFire используют порядок байтов с прямым порядком байтов.

Ваша длина (000034) интерпретируется как 3407872 байта. Вам нужно использовать 340000 кодировать 52.

Попробуйте короткую запись, например: 903D00000F00000000080000112233445566778800 написать "1122334455667788"...

Удачи!

EDIT>

Отрегулируйте длину в P3 APDU и WriteData для более длинных записей, например:

  • 903D0000170000000010000000112233445566778899AABBCCDDEEFF00

Обратите внимание, что DESFire имеет ограничение размера кадра, которое ограничивает число байтов, которые могут быть записаны в одном обмене командами (для команды DESFire WriteData в оболочке ISO это приблизительно 47 байтов данных). Вам необходимо выполнить несколько операций записи со смещением (не забывайте о кодировке с прямым порядком байтов) или использовать механизм ДОПОЛНИТЕЛЬНОЙ КАДРЫ - см. Руководство по DESFire (последнее немного быстрее).

Другие вопросы по тегам