簡體   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