如何使用 Python 验证智能卡的 PIN



我需要您的帮助来验证智能卡的 PIN。我正在使用Pythonpyscard.我知道我必须使用 APDU 命令,并且我必须使用 ScardTransmit() 发送它,但我找不到要使用的 APDU。例如:

SCardTransmit(hcard,dwActiveProtocol, 
              [0x00, 0x20, 0x00, 0x01, 0x06, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x00])

(所以使用 PIN = 123456( 将返回一个 6A 88 - 未找到引用数据

我想知道:有没有办法获得一些关于与特定智能卡一起使用的命令的提示,查看其ATR? 即:INS 字段中的命令"20"(APDU 由 CLA、INS P1、P2、DATA 组成(是 ISO 定义的验证 PIN 码,但如何理解我是否做错了什么?

谢谢。

PS:顺便说一下,使用 P2="00" 我得到 6A 83,找不到记录。

这可能会帮助...当涉及到GSM卡时,我们总是使用8字节的数据长度,即VERIFY_CHV = [0xA0、0x20、0x00、0x01、0x08]

后面的 PIN 数据填充0xFF,具体取决于实际引脚长度。即,如果 pin = 123456则 LJUST_PIN_HEX = [0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0xFF, 0xFF ]

然后,APDU 将是 VERIFY_CHV + LJUST_PIN_HEX

您的 APDU 是正确的 IFF 您的智能卡应用程序(您事先选择的 DF(有一个 ID 为 1 的 PIN(您在 P2 中提供了(。您可以设置最高有效位以指示命令在 MF 中搜索 PIN 1。

存在哪些 PIN(也可能根本没有(,如果卡具有文件系统,则它们所在的 DF 由卡的个性化定义。没有进一步的细节,答案必须非常笼统,例如尝试不同的P2值(最多0x1F(。

另一方面,一旦验证了PIN码,如果没有有关卡个性化的详细信息,您就不太可能取得进一步的进展,因此现在可能会开始获得它。

相关内容

  • 没有找到相关文章

最新更新