如何从卡获取Java卡版本? 有什么方法可以从卡上获取JC的版本。 或者我应该尝试为每个JC版本选项安装特定的applet。
答案 0 :(得分:5)
确定" white"支持的JavaCard API版本的唯一全面证明方式智能卡是为每个JavaCard版本构建一个单独的CAP文件。
我建议你让每个CAP只包含一个扩展javacard.framework.Applet
的简单类。您可能希望能够实际安装简单的applet并实际与它交换APDU以确保它实际工作;据我所知,即使并非所有导入都已解析,Java Card虚拟机实现也可以上传CAP文件,但如果您尝试实际使用这些API,则会失败。
生成CAP文件后,您可以通过解析生成的CAP文件中的COMPONENT_Import组件来验证它是否实际链接到了预期的JavaCard API包。 CAP文件格式在JavaCard虚拟机规范中描述,您想要的字段是导入的JavaCard包的package_info。
我已经包含了AID列表 - package_version_major.package_version_minor(package_name)信息。该列表可能不完整。
Java Card 2.1.1 :A0000000620201 - 1.1(javacardx.crypto)
Java Card 2.1.1 :A0000000620101 - 1.0(javacard.framework)
Java Card 2.1.1 :A0000000620001 - 1.0(java.lang)
Java Card 2.1.1 :A0000000620102 - 1.1(javacard.security)
Java Card 2.2.1 :A0000000620201 - 1.2(javacardx.crypto)
Java Card 2.2.1 :A0000000620101 - 1.2(javacard.framework)
Java Card 2.2.1 :A0000000620002 - 1.0(java.io)
Java Card 2.2.1 :A0000000620001 - 1.0(java.lang)
Java Card 2.2.1 :A0000000620003 - 1.0(java.rmi)
Java Card 2.2.1 :A0000000620102 - 1.2(javacard.security)
Java Card 2.2.1 :A000000062010101 - 1.0(javacard.framework.service)
Java Card 2.2.2 :A0000000620209 - 1.0(javacardx.apdu)
Java Card 2.2.2 :A0000000620202 - 1.2(javacardx.biometry)
Java Card 2.2.2 :A0000000620201 - 1.3(javacardx.crypto)
Java Card 2.2.2 :A0000000620203 - 1.0(javacardx.external)
Java Card 2.2.2 :A0000000620101 - 1.3(javacard.framework)
Java Card 2.2.2 :A0000000620002 - 1.0(java.io)
Java Card 2.2.2 :A0000000620001 - 1.0(java.lang)
Java Card 2.2.2 :A000000062020802 - 1.0(javacardx.framework.math)
Java Card 2.2.2 :A0000000620003 - 1.0(java.rmi)
Java Card 2.2.2 :A0000000620102 - 1.3(javacard.security)
Java Card 2.2.2 :A000000062010101 - 1.0(javacard.framework.service)
Java Card 2.2.2 :A000000062020803 - 1.0(javacardx.framework.tlv)
Java Card 2.2.2 :A000000062020801 - 1.0(javacardx.framework.util)
Java Card 3.0.1 :A0000000620209 - 1.0(javacardx.apdu)
Java Card 3.0.1 :A0000000620202 - 1.2(javacardx.biometry)
Java Card 3.0.1 :A0000000620201 - 1.4(javacardx.crypto)
Java Card 3.0.1 :A0000000620203 - 1.0(javacardx.external)
Java Card 3.0.1 :A0000000620101 - 1.4(javacard.framework)
Java Card 3.0.1 :A00000006202080101 - 1.0(javacardx.framework.util.intx)
Java Card 3.0.1 :A0000000620002 - 1.0(java.io)
Java Card 3.0.1 :A0000000620001 - 1.0(java.lang)
Java Card 3.0.1 :A000000062020802 - 1.0(javacardx.framework.math)
Java Card 3.0.1 :A0000000620003 - 1.0(java.rmi)
Java Card 3.0.1 :A0000000620102 - 1.4(javacard.security)
Java Card 3.0.1 :A000000062010101 - 1.0(javacard.framework.service)
Java Card 3.0.1 :A000000062020803 - 1.0(javacardx.framework.tlv)
Java Card 3.0.1 :A000000062020801 - 1.0(javacardx.framework.util)
Java Card 3.0.4 :A0000000620209 - 1.0(javacardx.apdu)
Java Card 3.0.4 :A0000000620202 - 1.2(javacardx.biometry)
Java Card 3.0.4 :A0000000620201 - 1.4(javacardx.crypto)
Java Card 3.0.4 :A0000000620203 - 1.0(javacardx.external)
Java Card 3.0.4 :A0000000620101 - 1.5(javacard.framework)
Java Card 3.0.4 :A00000006202080101 - 1.0(javacardx.framework.util.intx)
Java Card 3.0.4 :A0000000620002 - 1.0(java.io)
Java Card 3.0.4 :A0000000620001 - 1.0(java.lang)
Java Card 3.0.4 :A000000062020802 - 1.0(javacardx.framework.math)
Java Card 3.0.4 :A0000000620003 - 1.0(java.rmi)
Java Card 3.0.4 :A0000000620102 - 1.5(javacard.security)
Java Card 3.0.4 :A000000062010101 - 1.0(javacard.framework.service)
Java Card 3.0.4 :A000000062020804 - 1.0(javacardx.framework.string)
Java Card 3.0.4 :A000000062020803 - 1.0(javacardx.framework.tlv)
Java Card 3.0.4 :A000000062020801 - 1.0(javacardx.framework.util)
考虑到上述信息,我可以指出Michael Roland的回答有点误导。调用JCSystem.getVersion()
无助于确定是否支持Java Card版本;如果你已经到了可以实际调用API的程度,那么你已经确定该版本是受支持的。
答案 1 :(得分:1)
我会大胆并就此问题提出一些建议。如果您可以加载applet,通常也可以访问Global Platform卡管理器。卡管理器应该支持名为GET CPLC(DATA)的命令APDU。这将返回卡生产生命周期数据,其中包括芯片制造商的标识符(数量有限),操作系统制造商和版本信息。
有了这些信息,您应该能够向操作系统的创建者询问更多信息,例如完全支持的版本,全球平台支持,其他库等。当然,这取决于如果他们真的认为你值得支持,那就说明你是谁和你在哪里。
一个小问题是Visa似乎维护了标识符到实际公司的映射。我还没有在互联网上找到一个确定的清单,但是更常见的清单似乎是已知的。
答案 2 :(得分:0)
short version = JCSystem.getVersion();
方法getVersion()
返回Java Card API的主要版本和次要版本(每个部分在一个字节中)。没有方法可以区分子版本(例如2.2.1和2.2.2之间)。
只知道您的芯片包含Java Card运行时环境,就无法从芯片中查询更具体的信息。 (有些芯片可能会提供更具体的信息。)一般来说,您应该从制造商/供应商处获取此类信息。