2012-02-22 3 views
6

Java에서 MessageDigest를 사용하여 문자열의 해시 값을 가져 오려고하지만 값이 매번 다릅니다. 프로그램을 두 번 실행하면 다시 완전히 다른 답변을 얻을 수 있습니다.MessageDigest가 같은 문자열에 대해 다른 대답을 반환하는 이유는 무엇입니까?

 MessageDigest md = null; 

     try { 
      md = MessageDigest.getInstance("SHA-1"); 
     } catch (NoSuchAlgorithmException nsae) { 
     } 

     md.update("string".getBytes()); 
     byte[] digest = md.digest(); 
     System.out.println(digest); 

     md.reset(); 

     md.update("string".getBytes()); 
     byte[] digest2 = md.digest(); 
     System.out.println(digest2); 
+0

또한 'MessageDigest # reset()'은'MessageDigest # digest() '로 자동 호출됩니다. [(Javadoc 참조)] (https://docs.oracle.com/javase/7/docs/api/java/security/MessageDigest.html#digest()) – ZX9

답변

10

바이트 배열 내용이 아닌 byte[] 개체를 출력하고 있습니다.

System.out.println(Arrays.toString(digest1)); 
.... 
System.out.println(Arrays.toString(digest2)); 
+0

어떻게 콘텐츠를 출력 할 수 있습니까? 내가 .toString() 부분을 놓친 것 같지만 어떤 차이도없는 것 같습니다. – user1183661

+0

죄송합니다. 코드를 조금 늦게 추가했습니다 :'Arrays'는'java.util.Arrays'입니다 –

+1

'digest1' (또는'digest2')는'Object []를 상속받는'byte []'타입을 가지고 있습니다. ''toString()'구현 : 맹 글링 된 객체 유형과 해시 코드를 출력합니다. 이것은 당신이 원래 얻었던 것입니다. –

관련 문제