我需要您的帮助来验证智能卡的 PIN。我正在使用Python
和pyscard
.我知道我必须使用 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码,如果没有有关卡个性化的详细信息,您就不太可能取得进一步的进展,因此现在可能会开始获得它。