[英]How to store offline transaction data in Java Card
我是Java Card开发的新手。 我已经创建了一个Java Card applet进行在线支付。。但是我找不到方法进行离线交易。 我需要知道如何在Java Card中存储脱机数据(例如余额)。 有什么方法可以使用文件结构来存储数据?
JavaCard与PC上的Java有点不同。 您在applet中所做的一切都是持久的。 仅当您在RAM中显式分配变量时,卡复位(或断电)后内容才会丢失。
因此,例如applet类中的每个字段变量都可以用于存储离线数据。
对于脱机事务,需要将数据存储在持久性内存中。 此外,对此持久性存储器的更新应该是原子的 。 这意味着,如果交易正在进行中,并且有卡撕裂,则该交易应作废。 为此,Java Card在JCSystem
具有(恰当地命名为) beginTransaction
和abortTransaction
方法。
对于普通EEPROM或闪存的安全级别是否足以处理诸如交易和余额之类的敏感数据,存在一些讨论。 随交易一起更新(安全)校验和不会造成伤害,因此高级攻击者无法更改智能卡上存储的数据。 存储此校验和必须是原子事务的一部分。
Java Card不提供任何基于文件的结构。 很久以前就有一个提议的API,但是目前对ISO 7816-4 文件系统的支持以它的AID选择applet结尾。 该协议的其余部分是您的责任。 请注意,除了UPDATE BINARY
(和朋友)以外,您不应通过其他任何方式更新基本文件的内容。 通常,文件的内容应该是静态的,也可以由非实体实体生成。 例如,使用记录和GET DATA
更为合适-但您也必须自己编写这些程序。
创建持久性阵列以实现离线平衡
例如 余额=新字节[length_of_balance];
创建一个瞬态数组以计算脱机余额
例如 temp_balance = JCSystem.makeTransientByteArray(length_of_balance,CLEAR_ON_DESELECT);
当收到新金额时,
一种。 将余额加载到temp_balance
b。 累积新金额到temp_balance
C。 复制temp_balance以使用Util.arrayCopy进行平衡
希望这会有所帮助〜
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.