【问题标题】:ACR38 Readers and SLE4442 Java delayACR38 阅读器和 SLE4442 Java 延迟
【发布时间】:2014-03-12 10:05:32
【问题描述】:

我有智能卡 USB 读卡器(ACR38 和 ACR38 CCID)。我有一些 C# 代码可以完美地连接、发送 apdu 命令与 winscard.dll((SCardEstablishContext、SCardConnect、SCardControl 方法)。

我需要使用 java 来执行此操作,并且我使用 javax.smartcardio api,其中包含一些类似于此的代码: PCSC sample in java

检测到读卡器和插入的卡正常,但尝试连接时有延迟(15-20 秒)。此延迟仅在第一次插入卡时出现。如果我提取插入同一张卡,则没有延迟。如果我提取卡并插入另一张卡,则再次延迟。我无法连接前 15-20 秒,无论是否运行 java 程序。

当读卡器/卡连接后,我可以完美发送apdu命令。

否则用C#和winscard.dll api,没有延迟。

我用win7、win8、ACR38阅读器、ACR38 CCID阅读器测试...

为什么会有这个延迟?

【问题讨论】:

标签: java smartcard smartcard-reader


【解决方案1】:

如果这种情况仅在您所描述的第一次插入卡时发生,则可能某些其他进程可能对读卡器打开了独占连接。它可能是 Windows 内置的证书传播服务或一些类似的应用程序,它们是您可能已安装的卡中间件的一部分。也可能是 Windows 更新尝试为您的卡下载微型驱动程序。

【讨论】:

  • 好的,但是为什么 C# 代码(基于 winscard.dll)可以毫无延迟地工作?
  • Java 在其内部实现中也使用了 winscard.dll。也许延迟与您调用时执行的通信协议检测有关:Card card = terminal.connect("*"); 如果可以执行,您可以尝试使用“T=0”、“T=1”或“T=CL”而不是“*”吗更快?
  • 我使用了相同的协议,未定义,winscard.dll 为“0”,Java 为“*”....可以将 sharemode 传递给 javax.smarcardio 以使用 Direct 模式进行测试?
  • 我不确定。我想检查 javax.smartcardio.* 源代码,但我在互联网上的任何地方都找不到它(也许它是 Oracle 的专有部分?)。但是,如果您能以某种方式获取从 JRE 发出的 PCSC (winscard.dll) 调用的日志,这可能会有所帮助。通过简单的谷歌搜索,我找到了The APDU spying tool,但我以前从未使用过。
  • 好的...我测试了所有可能的模式和 java 代码。 Jariq 是对的……有些东西与操作系统相关。我用win 8.1测试了这个并且有延迟......否则win 7效果很好。放卡时没有启动任何司机助手,但卡在前20秒没有响应。有什么想法吗?
猜你喜欢
  • 2018-09-03
  • 2011-09-20
  • 2018-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-14
  • 2016-02-07
  • 2012-04-01
相关资源
最近更新 更多