如何通过读卡器使用Java激活/开启ICC卡?

Posted

技术标签:

【中文标题】如何通过读卡器使用Java激活/开启ICC卡?【英文标题】:How to activate/power on ICC card using Java through card reader? 【发布时间】:2012-01-06 03:31:33 【问题描述】:

我正在编写一个应用程序来与当前使用 Java 的智能卡进行交互。我有一个 OMRON V2BF 系列读卡器。该应用程序在 Debian 上运行。

我尝试使用Java Smart Card I/O API 尝试建立与智能卡的连接。

但我无法使用

检测/获取任何卡终端
    TerminalFactory factory = TerminalFactory.getDefault();
    List<CardTerminal> terminals = factory.terminals().list();

我还尝试通过向 OMRON 阅读器发送命令包来使用“按下并激活(冷重置)ICC”,但响应始终为“否定”。

我可以知道我做错了哪一部分吗?任何建议将不胜感激!

【问题讨论】:

【参考方案1】:

factory.terminals().list() 默认只会显示 PCSC 兼容设备。我没有看到有关当前阅读器的 PCSC 支持的任何信息。请咨询相关文档或供应商。

您的智能卡应该是兼容 ISO 7816-4 的智能卡才能与 javax.smartcardio 一起使用,存储卡将无法使用。 javax.smartcardio 基本上与 CommandAPDU 和 ResponseAPDU 一起使用,它们是“处理器”卡的 ISO 7816-4 兼容数据结构。

您可能无法使用阅读器制造商提供的接口规范通过串行接口与阅读器进行通信。您可以使用 Java Communications API 来执行此操作。

请注意,许多制造商会提供 C/C++ 甚至 .NET 的示例代码和库,在这种情况下,可以选择切换编程语言/平台或围绕本机代码创建 JNI 包装器。

如果您正在编写处理器卡(例如信用卡),您甚至可以自己创建一个 javax.smartcardio 兼容终端并将其插入终端列表。

【讨论】:

非常感谢。我已经和读卡器进行了串行通信,但是由于某些原因,当我尝试激活卡时,读卡器总是响应失败。 (响应代码描述:“当 C/R 激活 ICC 时,C/R 检测到提供 Vcc 时短路。”“当 C/R 激活 ICC 时,发生超时或奇偶校验错误。”)知道有什么问题吗?我只有制造商的数据传输规范。 在我看来,卡或读卡器有问题。我确实知道有时测试卡带有虚拟芯片,这可能会触发此错误。可能是卡的触点或读卡器的引脚确实短路了。奇偶校验错误也表明非常低级别的故障,例如在 ICC 硬件中。尝试不同的卡片,并检查它们是否被读卡器完全吞下。

以上是关于如何通过读卡器使用Java激活/开启ICC卡?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过使用 Python2.7 将卡刷到读卡器上来捕获 RFID 卡的 UID?

arduino门禁系统卡uid默认多少

在SANKYO ICT3K5-3R6940读卡器中选择根文件夹

CAC卡/读卡器的PKCS11驱动

使用 java smartcardio 函数发送 APDU 命令以将数据写入智能卡读卡器

WEB开发管理系统如何调用IC卡读卡器