使用Python和pyscard检索智能卡的PAN

时间:2017-03-16 14:38:49

标签: python apdu pan pyscard

我尝试使用pyscard中的Python检索智能卡的PAN。到目前为止我所做的是连接到阅读器并检索有关阅读器和卡的各种信息......但我找不到获取序列号的方法......

使用pyscard,首先要做的是在PC和智能卡之间建立通信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命令和第二个位置(INS)的0x84十六进制。

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

如您所见,APDU由5个不同的十六进制数字组成:CLA,INS,P1,P2,P3。

好的,仍然不是序列号,但我至少要打架:-)

顺便说一句,I'm reading the pyscard documentationISO7816 doc

提前谢谢!

1 个答案:

答案 0 :(得分:0)

您应指定您使用的智能卡。

如果我记得正确,并非所有的卡都有序列号可访问,如果可以访问,我不认为有标准命令。

无论如何,你应该看看iso 7816-4 standand,它定义了APDU命令。此外,您应该查看卡的文档,看看它是否有一些可以帮助您的非标准APDU命令。