我正在尝试使用Python
中的pyscard
检索智能卡的 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。
好吧,仍然不是序列号,但我至少在战斗:-)
顺便说一下,我正在阅读 pyscard 文档和ISO7816文档。
提前谢谢你!
您应该指定正在使用的智能卡。
如果我没记错的话,并非所有卡都可以访问序列号,如果可以访问,我认为没有标准命令。
无论如何,您应该查看定义 APDU 命令的 iso 7816-4 标准。此外,您应该检查卡的文档,看看它是否有一些可以帮助您的非标准 APDU 命令。