Получить 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, которая может вам помочь.