我能够连接到卡,现在我需要验证PIN但我无法确定应该使用哪些代码来执行验证
// Verify PIN
//HERE IS WHAT I´M NOT SURE WHAT TO USE - Just an Example
byte[] pin = new byte[] { 0x31, 0x32, 0x33, 0x34, 0xFF, 0xFF, 0xFF, 0xFF };
APDUParam apduParam = new APDUParam();
apduParam.Data = pin;
apduVerifyCHV.Update(apduParam);
apduResp = iCard.Transmit(apduVerifyCHV);
这是一张使用7位PIN的智能卡。它总是7位数。
**Example:**
{CLA, INS, P1, P2, Lc, b1, b2, b3, b4, b5, b6, b7}
我在这里有基本的CLA
,INS
,P1
,P2
,LC
个字节。
我应该为7位数的PIN设置+ 3个字节或6个字节
并且应该是实际的PIN或仅为0xFF值
Ex. {CLA, INS, P1, P2, Lc, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF} +7 Bytes
在规范中我找到了8位最小值和最大值以及最小值4和最大12位字节的示例......
答案 0 :(得分:3)
这比我想要的更简单......
当PIN使用带填充的ASCII格式转换时
输入的密码为1357(最小尺寸= 4,最大尺寸= 8位)
•CCID向ICC发送命令
CLA INS P1 P2 Lc 31 33 35 37 FF FF FF FF
当PIN使用BCD右对齐和控制字段时
输入的密码为13579(最小尺寸= 4,最大尺寸= 8位)•CCID向ICC发送命令
CLA INS P1 P2 Lc 01 00 01 35 79
所以,我所要做的就是设置正确的值。 在我的情况下使用左对齐的ASCII方法:
0x00 0x20 0x00 0x01 0x08 0x30 0x31 0x34 0x37 0x34 0x31 0x30 0xFF
3 - 指填充
3x - x指的是给定位置的实际引脚编号(左对齐) 因为我有一个7位数的PIN,所以未使用的字节应默认为0xFF
希望有所帮助