4

我可以连接到卡,现在我需要验证 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 字节的示例......

4

1 回答 1

4

这比我说的简单...

当 PIN 使用带填充的 ASCII 格式转换时

输入的 PIN 为 1357(最小大小 =4,最大大小=8 位)

  • • 左对齐
  • • CCID 的默认显示行为
  • • CCID 向 ICC 发送命令

    CLA INS P1 P2 Lc 31 33 35 37 FF FF FF FF

当 PIN 使用 BCD 右对齐和控制字段时

输入的 PIN 为 13579(最小大小 =4,最大大小=8 位)

  • • 正确的理由。个人密码少于8位;因此,八位代码的最高有效位必须用零填充。
  • • 帧在PIN 转换之前集成了一个特定的控制字段“01”。
  • • 没有消息
  • • 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

希望对某人有所帮助

于 2013-03-27T16:18:10.437 回答