我尝试使用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 documentation和ISO7816 doc。
提前谢谢!
答案 0 :(得分:0)
您应指定您使用的智能卡。
如果我记得正确,并非所有的卡都有序列号可访问,如果可以访问,我不认为有标准命令。
无论如何,你应该看看iso 7816-4 standand,它定义了APDU命令。此外,您应该查看卡的文档,看看它是否有一些可以帮助您的非标准APDU命令。