2014-06-17 1 views
-1

Javacard Framework를 사용하여 2 바이트 배열을 비교하고 싶습니다.Javacard - Arraycompare issues

최초 배열은 미리 정의되어

case (byte) 0x03: ///send D003000004|abcd 
    GetPassword = new byte[buffer[ISO7816.OFFSET_LC]]; 
     Util.arrayCopy(buffer, ISO7816.OFFSET_CDATA, GetPassword, (short) 0, lc); 
     Util.arrayCopy(GetPassword, (short) 0, buffer, (short) 0, lc); 
     apdu.setOutgoingAndSend((short) 0, (short) lc); 

출력 :
static byte[] PasswortA = { 'a', 'b', 'c', 'd' };

번째 어레이는 명령 라인을 통해 입력 될 것이다
/D003000004를 보낼 | ABCD
=> D0 03 00 00 04 61 62 63 64 ..... abcd
(349416 nsec)
< = 6162 63 개 64 90 00 ABCD ..
상태 : 없음 오류

내가 따라 배열을 비교 해요 : http://www.win.tue.nl/pinpasjc/docs/apis/jc222/javacard/framework/Util.html

case (byte) 0x05: ///send D005000001 
if((byte) 0 == Util.arrayCompare(PasswortA, (short) 0, GetPassword, (short) 0, lc)){ 
       buffer[0] = '1'; 
      } else { 
       buffer[0] = '0';    
      } 

출력 :
보내기/D005000001
=> D0 05 00 00 01 .....
(291102nsec)
< = 309000 ..
상태 : 아니요 오류 :

시각적으로 두 배열이 동일하므로 응답이 두 배열이 동일 할 때 함수가 반환해야하므로 응답으로 버퍼 (buffer [0] = '1';)에 1을 써야합니다. 위의 문서에 따라 0입니다.

누구나 내가 뭘 잘못하고 있는지, 왜 arrayCompare 함수가 2 개의 배열이 동일하지 않다고보고 했습니까?

감사합니다.

+0

어떻게/GetPassword를 선언합니까? 'case (byte) 0x03 :'과'case (byte) 0x05 :'를 평가할 때'lc'의 값은 무엇입니까? –

+0

GetPassword는 다음과 같이 선언됩니다 :'private byte [] GetPassword;''byte [] GetPassword = new byte [buffer [ISO7816.OFFSET_LC]];'. lc의 값은 항상'short lc = buffer [ISO7816.OFFSET_LC];'이다. – crappyleft

+0

@wlstead'PasswortA'에서'static'을 제거하지 못했습니다. 그래도 감사합니다. – crappyleft

답변

0

문제는 스위치 케이스 함수의 배열을 비교하려고했지만 입력 바이트 배열을 별도의 함수로 저장하지 못했습니다. 다음과 같이 저장하십시오.
private void compareLogin(APDU apdu, byte[] buffer, short lc){ byte a = Util.arrayCompare(PasswortA, (short) 0, GetPassword, (short) 0, lc); buffer[0] = a; apdu.setOutgoingAndSend((short) 0, (short) lc); }
비교 기능은 문서에 설명 된대로 작동합니다.

감사합니다.

+0

그래서 저장된 결과를 보내는 것을 잊어 버렸습니다. 자신의 대답을 수락하는 것을 잊지 마십시오 :) – David

+0

@David OP가 "답변"을 제공했지만 충분한 정보를 제공하지 못함 (코드 부분) 실제 문제를 설명/보여줍니다. 따라서 : 쓸모없는 대답. –