使用 java returns 6a86 验证 pin

verify pin using java returns 6a86

我有 SPR332 密码键盘 reader,我必须在 java 上编写程序来验证银行卡的密码。

所以这是我的 PINverifyStructure:

bTimeOut = 0х00
bTimeOut2 = 0х00
bmFormatString = 0x82
bmPINBlockString = 0x47
bmPINLengthFormat = 0x04
wPINMaxExtraDigitMax = 0x0c 
wPINMaxExtraDigitMin = 0x00 
bEntryValidationCondition = 0x02
bNumberMessage = 0x01
wLangId = 0x09 0x04 
bMsgIndex = 0x00
bTeoPrologue = 0x00 0x00 0x00
ulDataLength = apduLength 0x00 0x00 0x00

验证 APDU 命令是:

CLA = 0x00
INS = 0x20
P1 = 0x00
P2 = 0x00
LC  = 0x08
0x20
0xff
0xff
0xff
0xff
0xff
0xff
0xff

在此之后我在密码键盘上输入密码,然后我收到 APDU 响应 6a86。在 APDU 响应规范中,它表示 "Incorrect P1 or P2 parameter."

求助,我的命令有什么问题?

我把 P2 改成 0x01 ,响应是一样的 6a86

参见 EMV Book 3,6.5.12 验证命令-响应 APDU。

P2 应该是 0x80 - PlaintextPin 或 0x88 - EncipheredPin。在你的情况下 - 0x80.

我终于找到了为什么响应是 6a81。

这是因为我有 EMV 卡,所以应该按特定顺序调用 VERIFY 命令(在 SELECT FILE、GET PROCESSING OPTIONS、READ RECORD、GET DATA 之后)。

现在我有 9000 个了。谢谢大家