2013-05-28 49 views
2

我是Java Card應用程序的新手。在這一刻,我想存儲一個散列表(字典),其中包含讀取此類型卡的終端的配置。如果哈希表有值,那麼必須將這些值檢索到終端(我認爲使用APDU的權利?),但是如果沒有值,終端必須創建一個「默認」初始配置。java卡上的hastables

可以做到這一點嗎?如果是,如何?也許有一個applet準備好了(比如用於密鑰生成和簽名的Musclecard),但我還沒有找到任何。

有什麼建議嗎?謝謝!

回答

1

對於支持數據結構,Java Card非常有限。它有幾種基本類型,例如byteshort以及可選的int,這在傳統API中的任何地方都沒有使用。對於這些類型,您可以使用JCSystem.makeTransientByteArray()和朋友生成兩種類型的瞬態(RAM)陣列。此外,使用new創建的默認byte[],short[]Object[]被存儲在EEPROM中。

Java Card中的Object類也被剝離了。這意味着沒有像hashCode()這樣的東西。如果它存在,那麼隨着Java SE版本hashCode()返回一個整數(可能不存在),您將遇到問題。所有定義的數據容器都是智能卡或安全相關的(例如APDUKey類)。所以基本上,如果你想創建一個HashMap - Java SE上常見的字典類型 - 那麼你將不得不自己創建它。在這種情況下,定義一個類可以實現以充當密鑰的接口是一個不錯的主意。結構應該在正確的內存類型中生成。對於您指定的應用程序,您可能需要持久性內存,這是使用關鍵字new創建的對象實例的默認值。

就我個人而言,我會確信您需要一個hashCode()方法來解決您的問題。創建Object數組並簡單地迭代元素可能更容易。

+0

謝謝@owlstead,我正在考慮Object數組作爲選項,但問題是,對於同一個終端,可以應用多於一種的配置類型(2或3),所以我需要實現該Hashtable接口。如果你有一個清晰的例子,我可以使用,我真的很感激。 –

+0

@ManuelGustavoGuillen我自己只實現了'List'接口(當然是Java Card版本,因爲缺少整數支持等等)。那是我公司IP的一部分,因此不能共享。沒有簡單的方法來實現'Hashtable'或'HashMap'接口,而且我還沒有對Java Card的任何實現進行討論。 –

0

由於智能卡中沒有散列表,因此可以將終端配置存儲在字節數組中。智能卡只存儲配置(並可選擇保護數據),存儲配置或更新指令應由終端通過APDU命令發送。

建議1

放在一個線性定EF您的配置,如果該卡支持的文件系統。不需要創建/安裝小程序。讀取文件的所有記錄以確定配置是否存在以及使用標準APDU(UPDATE RECORD,READ RECORD)將配置寫入文件是終端工作。

注:

  • 組記錄長度爲終端配置的字節數
  • 記錄數表示可以存儲的配置的數量
  • 可以把初始條件,以表明該記錄是未使用的,例如00 ... 00

建議2

創建自己的Java卡小程序。小程序必須處理至少有三個專有的APDU:端子配置

  1. 獲取列表
  2. 更新終端配置
  3. 的記錄刪除終端配置的記錄

注:

  • 您需要處理如何存儲和返回APDU格式和您的存儲之間的字節
+0

謝謝@David,我沒有使用線性固定EF,所以我認爲您的建議2更好,但我認爲我必須實現類似於字典的數據結構,對吧?然後在applet中使用它。 –

+0

是的,你需要爲建議2實現你自己的數據結構。 – David