智能卡选择命令偶尔返回6A80错误



我正在编写一个与EMV卡对话的c#应用程序。应用程序正在使用CardWerk智能卡API编写[http://www.smartcard-api.com/index.shtml]

应用程序给芯片一个选择主卡应用命令。顺序如下:

  1. 发送选择命令到卡
  2. 如果响应代码是61XX,那么给出一个"GET response"命令,其中XX作为期望的长度。
  3. 读取数据。

大多数情况下,这很有效。但偶尔,我得到6A80错误作为"get response"命令的响应。原因是什么呢?

下面给出了错误的日志:

CMD 00A40400 (SELECT FILE) 07 A0000000041010 (' ......')
RSP 6139
CMD 00C00000 (GET RESPONSE) 39 
RSP 6A80

我会先问一下CardWerk。状态码很奇怪,意思是"命令数据字段参数不正确",我无法识别。如果之前建立了可信通道(这至少证明了命令数据字段的存在),这可能意味着用于安全消息传递的密钥是错误的。另一种解释可能是,另一个进程或线程也试图操作该卡并破坏了您的结果(循环检查是否存在该卡可能是这样的进程)。

如果您不依赖SELECT响应的信息,您也可以尝试减少影响,通过将P2设置为0C来抑制响应(如果您的卡支持),但这更多的是一个变通而不是解决方案。

最新更新