【问题标题】:How to send a PIN verification CODE to a smartcard using APDU - Using .NET如何使用 APDU 将 PIN 验证码发送到智能卡 - 使用 .NET
【发布时间】:2013-03-26 16:50:16
【问题描述】:

我可以连接到卡,现在我需要验证 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}

这里我有基本的CLAINSP1P2LC 字节。 我应该为 7 位 PIN 设置 + 3 个字节还是 6 个字节 并且应该是实际的 PIN 或只是一个 0xFF 值

Ex. {CLA, INS, P1, P2, Lc, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF} +7 Bytes

在规范中,我找到了最小和最大 8 位以及最小 4 和最大 12 字节的示例...

【问题讨论】:

    标签: .net smartcard asp.net-4.5 apdu


    【解决方案1】:

    这比我想象的要简单...

    当 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

    希望对某人有所帮助

    【讨论】:

    • 主机应用程序必须执行填充是非常罕见的,因为通常有效字符集不受限制,0xFF 将是合法字符。最大长度也不一定在外面知道。如果只允许使用数字,则 ISO 9564 定义了一些变体。
    • 您好,谁能提供具有验证PIN验证ADM命令的标准参考?它是在 ETSI 还是 ISO3GPP 中?
    • @Ac3_DeXt3R ISO/IEC 7816-4。它位于 170 美元的付费墙后面。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多