Разблокировать код PIN с помощью команд APDU: ошибка "67 00" -> Неверная длина

Используя WinsCard.dll, я хочу использовать команды APDU для сброса PIN-кода и установки нового в смарт-карту. Но когда я запускаю эти команды, я получаю ошибку "67 00" ("Неверная длина").

Мои команды APDU:

// First command, I verify the code PUK (return "90 00")
00 20 00 02 08 36 35 32 34 39 38 37 36  
// Second command, I try to set a new code PIN into the card
00 2C 03 01 0C 36 35 32 34 39 38 37 36 31 32 33 34

Для второй команды:

36 35 32 34 39 38 37 36 -> code PUK
31 32 33 34 -> new code PIN

После некоторых поисков единственное объяснение, которое я нашел, заключается в том, что параметр "Lc" был неверным. Но в моем случае он равен "0C", а длина моих данных - "0C".

Итак, я не понимаю, где моя ошибка.

У тебя есть идея?

Большое спасибо за Вашу помощь!

Примечание. Если я сбрасываю код PIN без ввода нового PIN-кода (он восстанавливает предыдущий код PIN), он работает нормально:

00 20 00 02 08 31 38 39 30 31 36 39 32
// Reset code PIN
00 2C 03 01 00

2 ответа

Решение

Использование команды RESET RETRY COUNTER (INS = 0x2C) с P1 = 0x03 означает, что вы хотите сбросить счетчик повторов без установки новых опорных данных (то есть нового PIN-кода). Если вы хотите установить новые справочные данные (новый PIN-код) при сбросе счетчика повторов, вы можете попробовать (в зависимости от того, что поддерживает ваша карта)

  • P1 = 0x00 (для формата, который вы пробовали):

    00 2C 00 01 0C 36 35 32 34 39 38 37 36 31 32 33 34
    
  • P1 = 0x02 (отправляются только новые справочные данные):

    00 2C 02 01 04 31 32 33 34
    

Ваша длина должна быть 0x10. Пожалуйста, смотрите ниже пример: A0 2C 00 01 10 3636303535333132 31323334 FFFFFFFF

Команда: A0 2C 00 01 10 Входные данные: 36 36 30 35 35 33 31 32 31 32 33 34 FF FF FF FF
Выходные данные: нет Статус: 90 00

здесь 3636303535333132 - ключ разблокировки, а 31323334 - новый пин

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