Smartcard — Как отправлять и получать данные, используя один APDU в C ++?

Я пишу код C ++, используя Winscard. Я заметил, что если я отправляю команду со Scardtransmit, где отправляются только данные или только полученные данные, проблем не возникает. Я могу отправить данные или получить правильный ответ.
Однако, когда команда отправляет данные и ожидает ответа, я всегда получаю 61xx. Я знаю, что код ошибки 61xx означает, что есть ответ xx байтов, где Le не верен, и проверил каждое возможное Le, включая возвращенное значение xx, но ничего не изменилось. Например, пусть Apdu имеет вид CLA INS P1 P2 Lc Data Le, и я получаю 61XX, затем я отправляю CLA INS P1 P2 Lc Data XX, снова я получаю 61XX.

Я проверил карту с помощью Java и других инструментов и убедился, что с картой ничего нет.

Насколько я понимаю, для Lc и Le выделен один байт P3. Есть ли способ получить ответы (кроме SW1SW2) от команд DATADATA?

0

Решение

Когда вы отправляете команду, содержащую данные команды, и команда также ожидает данные результата, и связь осуществляется по протоколу T = 0, вам необходимо отправить два APDU. Один для самой команды, а другой для получения результата.

61XX это не ошибка Это (успешное) слово состояния, которое указывает, что у вас есть XX байты ответа, которые вы можете получить с помощью GET RESPONSE (INS=0xC0).

Здесь ссылка на команду.

4

Другие решения

Других решений пока нет …