Получить PAN смарт-карты с помощью Python и Pyscard

Я пытаюсь получить PAN смарт-карты, используя pyscard в Python, Что я сделал, так это подключился к считывателю и получил различную информацию о считывателе и карте... но я не могу найти способ получить серийный номер...

Используя pyscard, первое, что нужно сделать, это создать коммуникацию context между ПК и смарт-картой:

hresult, hcontext = SCardEstablishContext(SCARD_SCOPE_USER)

Как только контекст будет установлен, давайте попробуем получить список активных устройств чтения смарт-карт:

hresult, readers = SCardListReaders(hcontext, [])

readers это список, читатели [0] будут содержать читателя, если у вас есть только один. На данный момент, что я сделал, чтобы получить ATR карты:

hresult, hcard, dwActiveProtocol = SCardConnect(hcontext,
current_reader, SCARD_SHARE_SHARED, SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1)

И это работает. Затем я попытался связаться с картой: здесь я пишу способ получить случайное число, используя команду APDU и гекс 0x84 во второй позиции (INS).

hresult, response = SCardTransmit(hcard,dwActiveProtocol,[0x00, 0x84, 0x00, 0x00, 0x00])

Как видите, APDU состоит из 5 различных шестнадцатеричных цифр: CLA, INS, P1, P2, P3.

Хорошо, еще не серийный номер, но я борюсь по крайней мере:-)

Кстати, я читаю документацию по pyscard и документ ISO ISO1616.

Заранее спасибо!

1 ответ

Вы должны указать, какую смарт-карту вы используете.

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

В любом случае, вы должны взглянуть на стандарт iso 7816-4, который определяет команды APDU. Кроме того, вы должны проверить документацию вашей карты, чтобы увидеть, есть ли у нее какая-то нестандартная команда APDU, которая может вам помочь.

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