我是 Java Card 应用程序的新手。此时我想存储一个哈希表(字典),其中包含读取此类卡的终端的配置。如果哈希表有值,则必须将这些值检索到终端(我认为使用 APDU 对吗?),但如果没有值,则终端必须创建“默认”初始配置。
是否有可能做到这一点?如果是,怎么做?也许有一个为此准备好的小程序(例如用于密钥生成和签名的 Musclecard),但我还没有找到。
有什么建议吗?谢谢!
Java Card 对数据结构的支持非常有限。它有一些基本类型,例如byte
andshort
和 optional int
,在经典 API 的任何地方都没有使用。JCSystem.makeTransientByteArray()
对于这些类型,您可以使用和朋友生成两种类型的瞬态 (RAM) 数组。此外,默认值byte[]
和short[]
创建Object[]
使用new
存储在 EEPROM 中。
Java Card 中的Object
类也被剥离了。这意味着不存在hashCode()
. 如果它存在,那么您会遇到问题,因为 Java SE 版本的hashCode()
返回一个整数,它可能不存在。所有定义的数据容器要么是智能卡,要么是安全相关的(例如APDU
和Key
类)。
所以基本上,如果你想创建一个HashMap
- Java SE 上常见的字典类型 - 那么你必须自己创建它。在这种情况下,定义一个Hashable
类可以实现作为键的接口是一个好主意。结构应该在正确类型的内存中生成。对于您指定的那种应用程序,您可能需要持久内存,这是使用new
关键字创建的对象实例的默认值。
就个人而言,我会非常确定您需要一种hashCode()
解决方案的方法。创建一个对象数组并简单地遍历元素可能更容易。
由于智能卡中没有哈希表,您可以将终端配置存储在字节数组中。智能卡仅存储配置(并可选择保护数据),获取存储配置或更新配置的指令应由终端通过 APDU 命令发送。
建议一
如果卡支持文件系统,请将您的配置放在线性固定 EF 中。无需创建/安装小程序。读取文件的所有记录以确定配置是否存在,并使用标准APDU(UPDATE RECORD,READ RECORD)将配置写入文件是终端工作。
笔记:
建议二
创建您自己的 javacard 小程序。小程序必须处理至少三个专有 APDU:
笔记: