【问题标题】:Retrieve smart card's PAN with Python and pyscard使用 Python 和 pyscard 检索智能卡的 PAN
【发布时间】:2017-03-16 14:38:49
【问题描述】:

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

使用pyscard,首先要做的是在PC和Smart Card之间创建一个通信context

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。

好吧,仍然不是序列号,但我至少在战斗:-)

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

提前谢谢你!

【问题讨论】:

    标签: python apdu pan pyscard


    【解决方案1】:

    您应该指定使用哪个智能卡。

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

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

    【讨论】:

    • 感谢您的回答。当我发现新的东西时,我会更新这个问题。我已经能够收到 ATR 的那一刻。我的用户没有所有相同类型的智能卡,所以我一直在寻找一种通用的方法来获取序列号(至少我知道他们拥有的每张卡都有一个序列号)。 Pyscard 有 许多 不同的命令,我正在探索它们...
    • 好的,向前一步:我意识到我可以向智能卡发送 APDU 命令。现在我正在寻找返回序列号的神秘命令...感谢您提及 ISO 7816-4。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多