繁体   English   中英

如何在Java卡中存储脱机交易数据

[英]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具有(恰当地命名为) beginTransactionabortTransaction方法。

对于普通EEPROM或闪存的安全级别是否足以处理诸如交易和余额之类的敏感数据,存在一些讨论。 随交易一起更新(安全)校验和不会造成伤害,因此高级攻击者无法更改智能卡上存储的数据。 存储此校验和必须是原子事务的一部分。

Java Card不提供任何基于文件的结构。 很久以前就有一个提议的API,但是目前对ISO 7816-4 文件系统的支持以它的AID选择applet结尾。 该协议的其余部分是您的责任。 请注意,除了UPDATE BINARY (和朋友)以外,您不应通过其他任何方式更新基本文件的内容。 通常,文件的内容应该是静态的,也可以由非实体实体生成。 例如,使用记录和GET DATA更为合适-但您也必须自己编写这些程序。

  1. 创建持久性阵列以实现离线平衡

    例如 余额=新字节[length_of_balance];

  2. 创建一个瞬态数组以计算脱机余额

    例如 temp_balance = JCSystem.makeTransientByteArray(length_of_balance,CLEAR_ON_DESELECT);

  3. 当收到新金额时,

    一种。 将余额加载到temp_balance

    b。 累积新金额到temp_balance

    C。 复制temp_balance以使用Util.arrayCopy进行平衡

希望这会有所帮助〜

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM