2013-03-07 4 views
0

java 용 다양한 Keccak 구현을 실험하고 있습니다. This implementation은 지금까지 가장 유망한 것이지만 이상한 결과를 얻고 있습니다. 테스트 케이스는 here으로 정의되어 있습니다 (테스트 코드에 따라 16 진수 문자열을 직접 사용하고 있지만). 현재 (올바른) 테스트 벡터는 녹색으로 here으로 정의되어 있습니다 (웹 사이트에서 공식 테스트 벡터 zip 파일을 다운로드하지 않아도되는 사람을 저장하기 위해 링크를 제공하고 있습니다).예기치 않은 keccak 출력

처음에는 테스트 벡터의 'len'및 'msg'필드 간의 상관 관계를 이해하지 못했습니다. 'Len'은 비트 단위로 'msg'의 길이라고 가정합니다. 예를 들어, 'len'= 5, 'msg'= "48"(16 진수 문자열), 나는 16 진수 2 = 1 바이트, 즉 8 비트라고 생각했습니다. 내가 뭘 놓치고 있니?

길이가 16, 24, 40, 56, 64, 72, 112 및 128 인 입력에 대해 정확한 다이제스트 (테스트 벡터 별)를 얻었습니다 (길이는 'len '필드이고, 입력은'msg '이다). 그러나 길이에 대한 값 : 32, 48, 80, 88, 96, 104는 테스트 벡터와 일치하지 않습니다. 누구나 이런 일이 일어나는 이유에 대해 교육받은 추측을 할 수 있습니까? 물론, Java에서 다른 구현을 추천 할 수 있다면 고맙겠습니다. 여기 예에서

+0

난 그냥 [GitHub의에 Keccak 및 SHA-3의 자바 구현] 나의 새로운 밀어했습니다 (https://github.com/Bobulous/Cryptography) 그렇게하면 도움이 될 것입니다. 필자는 6 주 동안 개발 및 테스트 (및 다시 작성)를 해왔으며 (주로 Keccak 팀에서 생성 한 KAT를 기준으로) 53,000 건의 단위 테스트를 통과 했으므로 상당히 건전해야합니다. – Bobulous

답변

1

보기 : LINK

하거나이 방법을 추가하려면 "Keccak"클래스 :

/** 
* @param string original string to get kekkan hash from it 
* @return hash or null 
*/ 
public static String generateHash(String string) { 
    Keccak keccak = new Keccak(); 
    String hex; 
    try { 
     hex = keccak.getHexStringByByteArray(string.getBytes("UTF-8")); 
    } catch (UnsupportedEncodingException e) { 
     return null; 
    } 
    // 576,64 is values for sha-512 
    return keccak.getHash(hex, 576, 64); 
}