编码APDU命令以验证PIN的问题

时间:2014-08-06 09:04:03

标签: smartcard apdu

我尝试使用javax.smartcardio API发送VERIFY(pin)命令。我的密码是12345678。

根据我在网上找到的一些例子,我尝试过这个APDU:

00 20 00 83 08 01 02 03 04 05 06 07 08

但结果是: 69 84 (reference data invalid)

我也尝试过:

00 20 00 83 08 12 34 56 78

但我仍然得到同样的错误。

根据我的SmartCart规格,该卡支持:

  • ISO 7816智能卡A,B和C型(5 V,3 V,1.8 V)
  • 与通信协议T = 0,T = 1
  • 兼容
  • 支持PPS(协议和参数选择)

我有点绝望,因为我无法找到出路。您能否建议我对我的APDU进行一些更改,或者甚至是一种完全不同的方法(另一种用于连接我的智能卡的库或语言)?

1 个答案:

答案 0 :(得分:5)

由于您的卡是ISO 7816,请参阅以下link部分6.12中的APDU。

您需要做的是:

  1. 检查使用的参考数据(P2)。对于PIN,通常是'01'或'81'。但是,请再次从您的信用卡供应商处查看正确的信息。
  2. 在执行实际的VERIFY命令之前,请先尝试获取剩余的尝试。这将帮助您锁定PIN,因为每次错误验证都会减少您的剩余尝试次数。这可以通过设置Lc = '00'并删除命令数据来完成。响应是SW1 ='63',SW2 ='CX',其中X表示剩余的尝试。 APDU命令示例:00 20 00 81 00
  3. 您需要将PIN转换为ASCII十六进制字节。因此,如果您的PIN码是12345678,则APDU为00 20 00 81 08 31 32 33 34 35 36 37 38