Чтение последовательных блоков памяти смарт-карты Mifare 1k - PullRequest
1 голос
/ 20 июня 2019

Я использую карту Mifare 1k и считыватель acr1252;Я занимаюсь разработкой с использованием visual c++ и библиотеки Winscard.

Мне удалось прочитать отдельный блок, используя следующий код:

// Read binary blocks
// Class: FF
// INS: B0
// P1: 00
// P2: the starting block number
// Le: length to read (multiple of 16)
BYTE    ReadBinary[] = { 0xFF, 0xB0, 0x00, 0x00, 0x10 };

BYTE readRes[256] = { 0 };
DWORD lenRead = sizeof(readRes);

SCardTransmit(hCard, SCARD_PCI_T1, ReadBinary, sizeof(ReadBinary), NULL, readRes, &lenRead)

Этот вызов функции возвращает SCARD_S_SUCCESS и readRes содержит значение блока + SW1 и SW2 со значениями 0x90 0x00 (успех)

Что я пытаюсь сделать, это чтение 2 последовательных блоков памяти (т. Е. Блока 0и блок 1 сектора 0), использующий ту же функцию, изменяющий только команду apdu:

ReadBinary[] = { 0xFF, 0xB0, 0x00, 0x00, 0x20 }; 
// Last byte changed to read 2 blocks

Но не работает: статус возврата все еще SCARD_S_SUCCESS, но считанные данные содержат только SW1 иSW2 со значениями 0x63 0x00 (ошибка).

AFAIK с карточками Mifare 1k возможно прочитать первые 3 блока сектора, но все тесты чтения, которые пытаются прочитать больше, чем сектор, терпят неудачу сэта ошибка.

Я что-то упустил?

...