我是Java Card應用程序的新手。在這一刻,我想存儲一個散列表(字典),其中包含讀取此類型卡的終端的配置。如果哈希表有值,那麼必須將這些值檢索到終端(我認爲使用APDU的權利?),但是如果沒有值,終端必須創建一個「默認」初始配置。java卡上的hastables
可以做到這一點嗎?如果是,如何?也許有一個applet準備好了(比如用於密鑰生成和簽名的Musclecard),但我還沒有找到任何。
有什麼建議嗎?謝謝!
我是Java Card應用程序的新手。在這一刻,我想存儲一個散列表(字典),其中包含讀取此類型卡的終端的配置。如果哈希表有值,那麼必須將這些值檢索到終端(我認爲使用APDU的權利?),但是如果沒有值,終端必須創建一個「默認」初始配置。java卡上的hastables
可以做到這一點嗎?如果是,如何?也許有一個applet準備好了(比如用於密鑰生成和簽名的Musclecard),但我還沒有找到任何。
有什麼建議嗎?謝謝!
對於支持數據結構,Java Card非常有限。它有幾種基本類型,例如byte
和short
以及可選的int
,這在傳統API中的任何地方都沒有使用。對於這些類型,您可以使用JCSystem.makeTransientByteArray()
和朋友生成兩種類型的瞬態(RAM)陣列。此外,使用new
創建的默認byte[]
,short[]
和Object[]
被存儲在EEPROM中。
Java Card中的Object
類也被剝離了。這意味着沒有像hashCode()
這樣的東西。如果它存在,那麼隨着Java SE版本hashCode()
返回一個整數(可能不存在),您將遇到問題。所有定義的數據容器都是智能卡或安全相關的(例如APDU
和Key
類)。所以基本上,如果你想創建一個HashMap
- Java SE上常見的字典類型 - 那麼你將不得不自己創建它。在這種情況下,定義一個類可以實現以充當密鑰的接口是一個不錯的主意。結構應該在正確的內存類型中生成。對於您指定的應用程序,您可能需要持久性內存,這是使用關鍵字new
創建的對象實例的默認值。
就我個人而言,我會確信您需要一個hashCode()
方法來解決您的問題。創建Object數組並簡單地迭代元素可能更容易。
由於智能卡中沒有散列表,因此可以將終端配置存儲在字節數組中。智能卡只存儲配置(並可選擇保護數據),存儲配置或更新指令應由終端通過APDU命令發送。
建議1
放在一個線性定EF您的配置,如果該卡支持的文件系統。不需要創建/安裝小程序。讀取文件的所有記錄以確定配置是否存在以及使用標準APDU(UPDATE RECORD,READ RECORD)將配置寫入文件是終端工作。
注:
建議2
創建自己的Java卡小程序。小程序必須處理至少有三個專有的APDU:端子配置
注:
謝謝@David,我沒有使用線性固定EF,所以我認爲您的建議2更好,但我認爲我必須實現類似於字典的數據結構,對吧?然後在applet中使用它。 –
是的,你需要爲建議2實現你自己的數據結構。 – David
謝謝@owlstead,我正在考慮Object數組作爲選項,但問題是,對於同一個終端,可以應用多於一種的配置類型(2或3),所以我需要實現該Hashtable接口。如果你有一個清晰的例子,我可以使用,我真的很感激。 –
@ManuelGustavoGuillen我自己只實現了'List'接口(當然是Java Card版本,因爲缺少整數支持等等)。那是我公司IP的一部分,因此不能共享。沒有簡單的方法來實現'Hashtable'或'HashMap'接口,而且我還沒有對Java Card的任何實現進行討論。 –