2012-01-06 70 views
0

我正在编写一个应用程序来与当前使用Java的智能卡进行交互。我有一个欧姆龙V2BF系列读卡器。该应用程序在Debian上运行。如何通过读卡器使用Java激活/开启ICC卡?

我一直在使用Java Smart Card I/O API尝试建立连接到智能卡尝试。

但我无法检测/使用

TerminalFactory factory = TerminalFactory.getDefault(); 
    List<CardTerminal> terminals = factory.terminals().list(); 

我使用“按下并激活(冷复位)ICC”通过发送一个命令包OMRON读者也试图得到任何卡终端,但响应总是“消极”。

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

回答

2

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兼容终端自己,把它插入到终端列表。

+0

非常感谢。我已经与读卡器进行了串行通信,但由于某些原因,当我尝试激活该卡时,读卡器总是响应失败。 (响应码描述: “当C/R激活ICC时,C/R检测到提供Vcc短路。” “发生C/R活动ICC,超时或奇偶校验错误时。”) 任何想法有什么不对?我只有制造商提供的数据传输规格。 – 2012-01-06 04:09:10

+0

在我看来,有些卡或读卡器有问题。我知道有时候测试卡会交付虚拟芯片,这可能会引发这种错误。可能是卡的触点或阅读器的引脚确实短路。奇偶校验错误也表示出现在非常低的级别故障中,例如在ICC硬件中。尝试使用不同的卡片,并检查它们是否完全被读卡器吞下。 – 2012-01-06 14:15:53

相关问题