2

我是 Java Card 应用程序的新手。此时我想存储一个哈希表(字典),其中包含读取此类卡的终端的配置。如果哈希表有值,则必须将这些值检索到终端(我认为使用 APDU 对吗?),但如果没有值,则终端必须创建“默认”初始配置。

是否有可能做到这一点?如果是,怎么做?也许有一个为此准备好的小程序(例如用于密钥生成和签名的 Musclecard),但我还没有找到。

有什么建议吗?谢谢!

4

2 回答 2

1

Java Card 对数据结构的支持非常有限。它有一些基本类型,例如byteandshort和 optional int,在经典 API 的任何地方都没有使用。JCSystem.makeTransientByteArray()对于这些类型,您可以使用和朋友生成两种类型的瞬态 (RAM) 数组。此外,默认值byte[]short[]创建Object[]使用new存储在 EEPROM 中。

Java Card 中的Object类也被剥离了。这意味着不存在hashCode(). 如果它存在,那么您会遇到问题,因为 Java SE 版本的hashCode()返回一个整数,它可能不存在。所有定义的数据容器要么是智能卡,要么是安全相关的(例如APDUKey类)。

所以基本上,如果你想创建一个HashMap- Java SE 上常见的字典类型 - 那么你必须自己创建它。在这种情况下,定义一个Hashable类可以实现作为键的接口是一个好主意。结构应该在正确类型的内存中生成。对于您指定的那种应用程序,您可能需要持久内存,这是使用new关键字创建的对象实例的默认值。

就个人而言,我会非常确定您需要一种hashCode()解决方案的方法。创建一个对象数组并简单地遍历元素可能更容易。

于 2013-05-29T21:24:03.703 回答
0

由于智能卡中没有哈希表,您可以将终端配置存储在字节数组中。智能卡仅存储配置(并可选择保护数据),获取存储配置或更新配置的指令应由终端通过 APDU 命令发送。

建议一

如果卡支持文件系统,请将您的配置放在线性固定 EF 中。无需创建/安装小程序。读取文件的所有记录以确定配置是否存在,并使用标准APDU(UPDATE RECORD,READ RECORD)将配置写入文件是终端工作。

笔记:

  • 将记录长度设置为终端配置字节数
  • 记录数表示可以存储的配置数
  • 您可以设置初始条件以指示该记录未使用,例如 00...00

建议二

创建您自己的 javacard 小程序。小程序必须处理至少三个专有 APDU:

  1. 获取终端配置列表
  2. 更新终端配置记录
  3. 删除终端配置记录

笔记:

  • 您需要处理如何存储和返回 APDU 格式和存储之间的字节
于 2013-05-29T09:38:03.653 回答