READ BINARY
APDU разрешают 2 байта для смещения файла, закодированного в P1 и P2, и используют Le для длины, для READ BINARY
количества байтов в ответе. P1 – это старший байт или самый старший байт. Однако самый верхний бит P1 зарезервирован, чтобы указать, содержит ли P1 также короткий идентификатор файла. Он должен оставаться на уровне 0
, если вы уже читаете файл, оставляя вам максимальное смещение 32Ki - 1.
Я не могу прочитать спецификации, на которые вы ссылаетесь, но давайте предположим, что READ BINARY
APDU на вашей карте работает так же.
Ваша команда прочитать первые 256 байтов кажется правильной, учитывая, что Le==0x00
указывает на чтение 256 байтов.
Чтобы прочитать байты, начинающиеся со смещения 256, 512 и т. д., начните увеличивать P1, например:
00 B0 01 00 00
00 B0 02 00 00
00 B0 03 00 00
Чтобы прочитать 256 байтов, начиная со смещения 257 (0x101):
00 B0 01 01 00
Смещение 600 (0x258):
00 B0 02 58 00
В вашем коде, если вы используете Java int
для хранения смещения, вы обычно в конечном итоге увеличиваете P1 примерно так:
int offset;
int P1, P2;
while (continueReading)
{
// ...
P1 = (offset >> 8) & 0xFF;
P2 = offset & 0x00FF;
// ...
// send APDU
}
Способ указания размера файла зависит от реализации. Обычно вы можете получить размер файла из структуры информации об управлении файлами (FCI), возвращаемой SELECT в EF (00 A4 00 00 02 fileId
). Однако размер файла также может быть встроен в содержимое файла. Если возможно, вы не должны полагаться на слова состояния, чтобы узнать размер файла.
Дополнение: Le, Ne и нечетные INS
Важно, чтобы вы увеличивали смещение только на количество байтов, которое вы фактически получили в данных ответа (RDATA). Обратите внимание, что если P3 = Le, то Le кодирует Ne, что является максимальным размером данных ответа. Вы можете получить меньше, чем это.
Если размер файла составляет 32 КБ или более, вам необходимо использовать READ BINARY с нечетным INS (B7
), чтобы прочитать данные выше 32 КБ. В этом случае RDATA также может содержать служебные данные. Очевидно, что это, в свою очередь, может повлиять на вычисления смещения и вычисления для чтения до конца файла.
person
pb2q
schedule
02.07.2012