Java smartcardio APDU 响应超时

标签 java exception timeout smartcard pcsc

我正在使用javax.smartcardio通过CardChannel.transmit(CommandAPDU command)向智能卡发送APDU命令。

但是,似乎在某处定义了超时,因为当我没有收到来自智能卡的 APDU 响应时,我总是收到 sun.security.smartcardio.PCSCException: Unknown error 0x8010002f

当我想要生成 key 需要超过 60 秒并且总是在 60 秒后失败时,就会发生这种情况。用于生成较短位长度 key 的所有其他命令都可以在 60 秒内正常工作。

我试图找出导致此异常的原因,但我真的不知道。 它是 Java 特有的还是我应该看看其他地方?

此行为发生在带有 Java 8 的桌面 Windows 7 x64 上。有趣的是,在具有相同操作系统和 Java 版本的不同桌面上,生成工作正常,没有任何异常...

最佳答案

在协议(protocol)级别(即 T=0 或 T=1),如果超过 ATR BWI 中指示的时隙,卡必须发送所谓的 WTX(等待时间延长)请求。

所以我会考虑这些可能性:

  • 卡片上显示的 BWI 太小了。这可以通过修改 ATR 来解决(如果可能的话)
  • 该卡负责发送 WTX 请求的定时器中断服务例程有问题
  • 阅读器无法正确响应 WTX 请求,因此可能会尝试不同的阅读器。 (您在其他台式电脑上是否有相同型号和相同固件版本的读卡器?)

但是:给出的可能原因均不受操作系统或 Java 版本的影响,所有原因都在读卡器或卡内。

关于Java smartcardio APDU 响应超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38367968/

相关文章:

java - 在优先考虑源代码保护的情况下加密 JAR

java - 无法在 Android 应用程序中使用 Drivermanager.getConnection(...)

java - 需要帮助来发现java空指针异常

android - 如何使 Asynctask 超时并关闭 ProgressDialog?

java - Google Guava Cache - 在运行时更改驱逐超时值

java - 将数字因式分解放入数组中

java - JMockit - 初始化问题

python httplib httpException 错误代码

swift - “Fatal error: Unexpectedly found nil while unwrapping an Optional value”是什么意思?

正则表达式超时