如何访问 Omnikey 3121 智能卡 reader

How to get access to Omnikey 3121 smart card reader

我想使用 Java 通过 Omnikey reader 访问智能卡。我找到了一些解决方案,例如 smartcardio,但它们的帮助还不够。基本上我是用 reader 连接的,但是当我不需要它时它会使用 APDU。我有一个想法,通过 USB 打开我的 reader 流,并通过流将二进制命令放入设备,然后以相同的方式获得答案,但从技术上讲,我如何将其写入 Java?

我还找到了像 usb4java 这样的库,但对此也有不好的看法。也许有人对这个设备有任何经验,可以给我一些提示吗?

网上关于智能卡编程的教程并不多。我也尝试过使用 pyApduTool 或 HID Omnikey Sync API V2.0.,但这仅用于测试。我必须编写简单的请求才能从卡中获取信息。

基本上有两种方法可以解决您的问题:

  1. 不要使用 java.smartcardio 使用的 PC/SC 接口,而是使用卡 reader 制造商的原生专有库,例如使用包装器 (基于 JNI,但还有更好/更高级别的替代方案);

  2. 继续使用 APDU,但使用 CLA 字节设置为 FF 十六进制,打开到 reader 的连接。 FF是预留的,但是一般是预留给这种卡reader访问,例如访问 reader 制造商支持的不带 ISO/IEC 7816-4 层的存储卡。

  3. 二选一(仅供完整性):许多卡reader是使用USB转串行接口芯片创建的,这意味着您可以直接连接到(虚拟)串行接口;不用说,如果这个界面存在的话,你将不得不知道发送什么命令并自己编程一切(Omnikey 3121 相对较新,所以我会感到惊讶)。

这两个选项都依赖于卡 reader 的特定功能,因此您将找到 reader 的信息以查看可能的情况。据我所知,没有办法请求提供什么功能。不要对这种功能的标准化抱有太大期望。

你检查过你的卡 reader 特定文件了吗?