我在PINPAD阅读器上验证PIN码的所有尝试最终都失败了,这是我的情况:
我使用APDU命令选择和读取文件,设置安全环境(MSE:SET),经过大量研究和合并不同文档的不同解决方案后,我可以让读者询问我的PIN码码。但是使用我的伪APDU命令,我收到69 | C#响应。相同的过程(读取文件,设置安全环境和验证PIN)在没有PINPAD的USB读卡器上正常工作,所以我猜APDU命令没问题,但不是之前的伪APDU命令。
The BEID documentation,PC / SC Spec第10部分(2.5.2)和补充(2.2.1)和USB Smart Card devices,用于6.1.11.3至6.1.11.6的章节。
第一部分应为FF C2 01 06
,以便在阅读器上进行直接PIN验证,然后是后续数据的大小。
接下来应遵循PC / SC第10部分的结构,其中包括:
00
); 89
,因为它应该是10001001
1个字节的偏移PIN,左对齐和BCD); 48
,因为包含4位长度,PIN块为8字节); 04
:PIN块中的4位偏移量); 040C
(但没有这样的工作,0404
肯定能够正常工作); 02
表示ok按钮; 01
使用命令中的消息; 0409
; 00
,表示输入PIN; 000000
因为此字段未被使用; 0000000D
是我的猜测); 0020000108FFFFFFFFFFFFFFFF
我已经多次改变了一些我不太确定的值(2,3,4,11和12对于已经存在的填充字符),没有成功,有时只是不同的结果代码。 / p>
我在这里做错了什么?
提前谢谢!答案 0 :(得分:2)
经过最后一轮研究和检查后,我发现另一个例子告诉我我的错误:PIN块!它是47,因为它不包括控制/有效PIN长度。所以对我来说正确的答案是:
0xFF, 0xC2, 0x01, 0x06, // Base PPDU command
0x20, // Length of the data
0x00, // timeout
0x00, // timeout
0x89, // format
0x47, // PIN block
0x04, // PIN length format
0x04, // Min pin size
0x04, // Max pin size
0x02, // Entry validation condition
0x01, // Number of messages to display
0x04, 0x09, // English
0x00, // Message "Enter pin"
0x00, 0x00, 0x00, // Non significant here
0x00, 0x00, 0x00, 0x0D, // Length of the apdu once formatted
0x00, 0x20, 0x00, 0x01, // APDU command VERIFY
0x08, // APDU command Data length
0x20, // APDU command Control data + Effective PIN length
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF // APDU command PIN + filler