确定“白色”智能卡支持的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的程度,那么你已经确定该版本是受支持的.