Записать данные на смарт-карту в файле 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 (последнее немного быстрее).