/ / hastables na java karte - hashtable, javacard, apdu

hastables na java kartu - hashtable, javacard, apdu

Som nový v aplikáciách Java Card. V tejto chvíli by som chcel uložiť tabuľku hash (slovník), ktorá obsahuje konfiguráciu terminálu, ktorý číta tento typ kariet. Ak má hašovacia tabuľka hodnoty, tieto sa musia načítať do terminálu (myslím, že použitie APDU je správne?), Ale aj ak nie sú žiadne hodnoty, terminál musí vytvoriť "predvolenú" počiatočnú konfiguráciu.

Je to možné? Ak áno, ako? Možno je na to pripravený aplet (ako napríklad Musclecard pre generovanie kľúčov a podpisovanie), ale nenašiel som ho.

Hociaká rada? Vďaka!

odpovede:

1 pre odpoveď č. 1

Java Card je dosť obmedzená, čo sa týka podpory dátových štruktúr. Má niekoľko základných typov, ako napr byte a short a voliteľne int, ktorý sa nepoužíva nikde v klasickom API. Pre tieto typy môžete generovať dva typy prechodných (RAM) polí s použitím JCSystem.makeTransientByteArray() a priatelia. Okrem toho, predvolené byte[], short[] a Object[] vytvorené pomocou new sú uložené v EEPROM.

Na Object triedy v Java Card má aj vyzliekol.To znamená, že neexistuje žiadna taká vec ako hashCode(). Keby to bolo prítomných potom by narazíte na problémy ako Java SE verzia hashCode() vráti celé číslo, ktoré pravdepodobne nie je prítomné. Všetky definované dátové kontajnery súvisia buď s inteligentnou kartou alebo s bezpečnosťou (napr APDU a Key triedy).

Takže v podstate, ak chcete vytvoriť HashMap - bežný typ slovníka v Java SE - potom ho budete musieť vytvoriť sami. V takom prípade je vhodné definovať a Hashable rozhranie, ktoré triedy môžu implementovať, aby fungovali akoKľúč. Štruktúry by mali byť generované v správnom type pamäte. Pre druh aplikácie, ktorú zadáte, budete pravdepodobne potrebovať trvalú pamäť, čo je druh predvoleného nastavenia pre inštancie objektov vytvorené pomocou new kľúčové slovo.

Osobne by som sa ubezpečil, že potrebujete hashCode() spôsob riešenia. Je pravdepodobne ľahšie vytvoriť pole Object a jednoducho iterovať cez prvky.


0 pre odpoveď č. 2

Pretože na inteligentnej karte nie je žiadna tabuľka hash,konfigurácie terminálov môžete ukladať do bajtových polí. Inteligentná karta ukladá konfiguráciu (a voliteľne chráni údaje) a príkaz na uloženie konfigurácie alebo jej aktualizáciu sa odosiela terminálom prostredníctvom príkazu APDU.

Návrh 1

Vložte svoju konfiguráciu do lineárneho pevného EF, akkarta podporuje systém súborov. Nie je potrebné vytvárať / inštalovať žiadny applet. Úlohou terminálu je prečítať všetky záznamy súboru, aby sa určilo, či konfigurácia existuje alebo nie, a zapísať konfiguráciu do súboru pomocou štandardného APDU (UPDATE RECORD, READ RECORD).

POZNÁMKA:

  • nastaviť dĺžku záznamu ako počet bajtov konfigurácie terminálu
  • počet záznamov označuje počet konfigurácií, ktoré je možné uložiť
  • môžete uviesť počiatočnú podmienku, ktorá označuje, že záznam nie je používaný, napr. 00 ... 00

Návrh 2

Vytvorte si vlastný applet javacard. Applet musí spracovať najmenej tri proprietárne APDU:

  1. Získajte zoznam konfigurácií terminálov
  2. Aktualizujte záznam konfigurácie terminálu
  3. Vymažte záznam konfigurácie terminálu

POZNÁMKA:

  • Musíte zvládnuť spôsob ukladania a vracania bajtov medzi formátom APDU a vašim úložiskom