如何从卡中获取Java卡版本?有什么方法可以从卡中获取JC版本。还是应该尝试为每个JC版本选项安装特定的小程序。
确定“白色”智能卡支持的JavaCard API版本的唯一完整方法是为每个JavaCard版本构建一个单独的CAP文件。
我建议您使每个CAP只包含一个简单的类,以扩展 javacard.framework.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卡2.1.1:A0000000620201-1.1(javacardx.crypto)
Java卡2.1.1:A0000000620101-1.0(javacard.framework)
Java卡2.1.1:A0000000620001-1.0(java.lang)
Java卡2.1.1:A0000000620102-1.1(javacard.security)
Java卡2.2.1:A0000000620201-1.2(javacardx.crypto)
Java卡2.2.1:A0000000620101-1.2(javacard.framework)
Java卡2.2.1:A0000000620002-1.0(java.io)
Java卡2.2.1:A0000000620001-1.0(java.lang)
Java卡2.2.1:A0000000620003-1.0(java.rmi)
Java卡2.2.1:A0000000620102-1.2(javacard.security)
Java卡2.2.1:A000000062010101-1.0(javacard.framework.service)
Java卡2.2.2:A0000000620209-1.0(javacardx.apdu)
Java卡2.2.2:A0000000620202-1.2(javacardx.biometry)
Java卡2.2.2:A0000000620201-1.3(javacardx.crypto)
Java卡2.2.2:A0000000620203-1.0(javacardx.external)
Java卡2.2.2:A0000000620101-1.3(javacard.framework)
Java卡2.2.2:A0000000620002-1.0(java.io)
Java卡2.2.2:A0000000620001-1.0(java.lang)
Java卡2.2.2:A000000062020802-1.0(javacardx.framework.math)
Java卡2.2.2:A0000000620003-1.0(java.rmi)
Java卡2.2.2:A0000000620102-1.3(javacard.security)
Java卡2.2.2:A000000062010101-1.0(javacard.framework.service)
Java卡2.2.2:A000000062020803-1.0(javacardx.framework.tlv)
Java卡2.2.2:A000000062020801-1.0(javacardx.framework.util)
Java卡3.0.1:A0000000620209-1.0(javacardx.apdu)
Java卡3.0.1:A0000000620202-1.2(javacardx.biometry)
Java卡3.0.1:A0000000620201-1.4(javacardx.crypto)
Java卡3.0.1:A0000000620203-1.0(javacardx.external)
Java卡3.0.1:A0000000620101-1.4(javacard.framework)
Java卡3.0.1:A00000006202080101-1.0(javacardx.framework.util.intx)
Java卡3.0.1:A0000000620002-1.0(java.io)
Java卡3.0.1:A0000000620001-1.0(java.lang)
Java卡3.0.1:A000000062020802-1.0(javacardx.framework.math)
Java卡3.0.1:A0000000620003-1.0(java.rmi)
Java卡3.0.1:A0000000620102-1.4(javacard.security)
Java卡3.0.1:A000000062010101-1.0(javacard.framework.service)
Java卡3.0.1:A000000062020803-1.0(javacardx.framework.tlv)
Java卡3.0.1:A000000062020801-1.0(javacardx.framework.util)
Java卡3.0.4:A0000000620209-1.0(javacardx.apdu)
Java卡3.0.4:A0000000620202-1.2(javacardx.biometry)
Java卡3.0.4:A0000000620201-1.4(javacardx.crypto)
Java卡3.0.4:A0000000620203-1.0(javacardx.external)
Java卡3.0.4:A0000000620101-1.5(javacard.framework)
Java卡3.0.4:A00000006202080101-1.0(javacardx.framework.util.intx)
Java卡3.0.4:A0000000620002-1.0(java.io)
Java卡3.0.4:A0000000620001-1.0(java.lang)
Java卡3.0.4:A000000062020802-1.0(javacardx.framework.math)
Java卡3.0.4:A0000000620003-1.0(java.rmi)
Java卡3.0.4:A0000000620102-1.5(javacard.security)
Java卡3.0.4:A000000062010101-1.0(javacard.framework.service)
Java卡3.0.4:A000000062020804-1.0(javacardx.framework.string)
Java卡3.0.4:A000000062020803-1.0(javacardx.framework.tlv)
Java卡3.0.4:A000000062020801-1.0(javacardx.framework.util)
考虑到以上信息,我可以指出迈克尔·罗兰德的回答有些误导。调用JCSystem.getVersion()
无助于确定是否支持Java Card版本。如果您可以实际调用该API,那么您已经确定该版本受支持。