我是Java Card开发的新手。我已经创建了一个用于在线支付的Java Card applet。但是我找不到如何进行离线交易的方法。我需要知道如何在Java Card中存储离线数据(例如余额)。有没有办法使用文件结构来存储数据?
答案 0 :(得分:1)
JavaCard与PC上的Java略有不同。你在applet中所做的一切都是持久的。只有在RAM中明确分配变量时,才会在卡复位(或断电)时丢失内容。
因此每个字段变量例如在您的applet类中可用于存储您的离线数据。
答案 1 :(得分:1)
对于离线事务,您需要将数据存储在 persistent 内存中。此外,对此持久性内存的更新应为 atomic 。这意味着如果交易正在进行并且存在卡撕裂,则交易应该无效。为此,Java Card在JCSystem
中有(适当命名的)beginTransaction
和abortTransaction
方法。
如果普通EEPROM或闪存的安全级别足以处理敏感数据(如交易和余额),则会进行一些讨论。与事务一起更新(安全)校验和不会有什么坏处,这样高级攻击者就无法改变存储在智能卡上的数据。存储此校验和必须是原子事务的一部分。
Java Card不提供任何基于文件的结构。很久以前就有一个提议的API,但目前对ISO 7816-4 文件系统的支持以它的AID选择小程序结束。协议的其余部分是您的责任。请注意,您不应使用UPDATE BINARY
(和朋友)之外的任何内容更新基本文件的内容。通常,文件的内容应该是静态的或由off卡实体生成。使用例如记录和GET DATA
会更合适 - 但你也必须自己编程。
答案 2 :(得分:1)
为脱机余额创建持久数组
离。 balance = new byte [length_of_balance];
创建一个瞬态数组来计算离线余额
离。 temp_balance = JCSystem.makeTransientByteArray(length_of_balance,CLEAR_ON_DESELECT);
收到新金额时
一个。将余额加载到temp_balance
湾累积新的金额到temp_balance
℃。使用Util.arrayCopy
希望这会有所帮助〜