[英]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.