-2

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

使用 pyscard,首先要做的是创建contextPC 和 Smart Card 之间的通信:

hresult, hcontext = SCardEstablishContext(SCARD_SCOPE_USER)

建立上下文后,让我们尝试获取活动智能卡读卡器的列表:

hresult, readers = SCardListReaders(hcontext, [])

readers是一个列表,如果你只有一个,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 文档

先感谢您!

4

1 回答 1

0

您应该指定您正在使用的智能卡。

如果我没记错的话,并不是所有的卡都可以访问序列号,如果可以访问,我认为没有标准命令。

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

于 2017-03-17T10:07:46.013 回答