2013-05-28 3 views
2

자바 카드 응용 프로그램에 새로운입니다. 이 순간에이 카드 유형을 읽는 터미널 구성을 포함하는 해시 테이블 (사전)을 저장하고 싶습니다. 해시 테이블에 값이 있으면 터미널에 가져와야합니다 (APDU의 권한을 사용한다고 생각합니까?)하지만 값이 없으면 터미널에서 "기본"초기 구성을 만들어야합니다.hastables on java card

가능합니까? 그렇다면 어떻게? 어쩌면 거기에 애플릿이 준비되어 있습니다 (키 생성 및 서명을위한 Musclecard와 같은)하지만 나는 아무것도 발견하지 못했습니다.

어떤 조언이 필요합니까? 감사!

답변

1

자바 카드는 데이터 구조에 대한 지원이 매우 제한적입니다. byteshort 및 선택적으로 int과 같은 몇 가지 기본 유형이 있으며 기본 API에서는 사용되지 않습니다. 이러한 유형의 경우 JCSystem.makeTransientByteArray() 및 친구를 사용하여 두 가지 유형의 임시 (RAM) 배열을 생성 할 수 있습니다. 또한 new을 사용하여 생성 된 byte[], short[]Object[]은 EEPROM에 저장됩니다.

자바 카드의 Object 클래스도 제거되었습니다.이는 hashCode()과 같은 것이 없음을 의미합니다. Java SE 버전이 hashCode()이면 정수가 반환되므로 문제가 발생할 수 있습니다. 정의 된 모든 데이터 컨테이너는 스마트 카드 또는 보안과 관련됩니다 (예 : APDUKey 클래스).

기본적으로 Java SE에서 일반적인 유형의 HashMap을 작성하려면 직접 작성해야합니다. 그런 경우 클래스가 키로 작동하도록 구현할 수있는 Hashable 인터페이스를 정의하는 것이 좋습니다. 구조는 올바른 유형의 메모리에서 생성되어야합니다. 지정하는 응용 프로그램의 경우 영구 단어 (new 키워드를 사용하여 만든 객체 인스턴스의 기본값)가 필요할 수 있습니다.

개인적으로 솔루션에 hashCode() 메서드가 필요하다는 것을 개인적으로 확신합니다. Object 배열을 만들고 요소를 반복하는 것이 더 쉽습니다.

+0

감사합니다. @owlstead, 그리고 Object 배열에 대한 옵션으로 생각하고 있었지만 요점은 동일한 터미널에 대해 두 가지 이상의 구성 유형을 적용 할 수 있다는 것입니다 (2 또는 3) 그래서 그 Hashtable 인터페이스를 구현해야합니다. 내가 사용할 수있는 명확한 모범이 있다면, 나는 정말로 감사 할 것이다. –

+0

@ManuelGustavoGuillen 필자는 자신 만의 List 인터페이스를 구현했습니다 (정수 지원이 부족하기 때문에 Java Cardized 버전). 그 중 하나가 내 회사 IP의 일부이므로 공유 할 수 없습니다. 'Hashtable' 또는'HashMap' 인터페이스를 구현하는 쉬운 방법은 없으며 아직 자바 카드 구현을 건너 가지 않았습니다. –

0

스마트 카드에 해시 테이블이 없으므로 터미널 구성을 바이트 배열로 저장할 수 있습니다. 스마트 카드는 구성을 저장하고 (선택적으로 데이터를 보호 할 수 있음) APDU 명령을 통해 단말기가 저장 구성을 가져 오거나 업데이트하도록 지시해야합니다. 카드가 파일 시스템을 지원하는 경우

제안 1

는 선형 고정 EF의 구성을 넣습니다. 애플릿을 작성하거나 설치할 필요가 없습니다. 구성이 존재하는지 여부를 판별하고 표준 APDU (UPDATE RECORD, READ RECORD)를 사용하여 파일에 구성을 쓰는 것은 파일의 모든 레코드를 읽는 작업입니다.

참고 : 레코드 수는 기록이 있음을 표시하기 위해 초기 조건을 넣을 수 있습니다

  • 저장 될 수있는 구성의 수를 나타낸다
  • 터미널 구성 바이트 수로

    • 세트의 레코드 길이 미사용, 예. 00 ... 00

    제안이

    자신의 자바 카드 애플릿을 만듭니다. 애플릿은 적어도 세 독점 APDU를 처리해야합니다 : 터미널 구성의 기록을 삭제 터미널 구성

    1. 가져 오기 목록
    2. 업데이트 터미널 구성
    3. 의 기록을

    참고 :

    • APDU 형식과 저장소 사이의 바이트를 저장하고 반환하는 방법을 처리해야합니다.
  • +0

    감사합니다 @ David, 선형 수정 EF를 사용하지 않았으므로 제안 2가 더 좋다고 생각하지만 사전과 비슷한 데이터 구조를 구현해야한다고 생각하십니까? 그런 다음 애플릿 내에서 사용하십시오. –

    +0

    예, 제안 2에 대한 자신의 데이터 구조를 구현해야합니다. – David