2013-03-05 6 views
0

"password" 문자열의 MD5 해시를 가져 오려고합니다.메시지 다이제스트 해시 MD5

5f4dcc3b5aa765d61d8327deb882cf99

을하지만 MD5와 자바의 MessageDigest 클래스를 사용하고 때이 무엇입니까 :

나는 스프링 프레임 워크에서 MD5PasswordEncoder 클래스를 사용하고 나는이 무엇입니까

9577-525990-89101-4229-12539-34-72-126-49-103

첫 번째는 16 진수이고 다른 하나는 10 진수입니다. 차이점은 무엇입니까? 다음은 코드입니다.

public static void main(String[] args) { 
    PasswordEncoder pEncoder = new Md5PasswordEncoder(); 
    System.out.println(pEncoder.encodePassword("password", null)); 

    try { 
     MessageDigest md = MessageDigest.getInstance("MD5"); 
     md.update("password".getBytes("UTF-8")); 
     byte [] digest = md.digest(); 
     StringBuffer sb = new StringBuffer(); 
     for (byte b : digest) { 
      sb.append(b); 
     } 
     System.out.println(sb.toString()); 

    } catch (NoSuchAlgorithmException e) { 
     e.printStackTrace(); 
    } catch (UnsupportedEncodingException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 
+1

질문을 추가하지 않으 셨습니다. 질문이 다른 이유는 무엇입니까? 내 대답은 다음과 같습니다. 두 클래스의 문서를 읽었습니까? – Augusto

+0

* 매우 다른 값을 제외하고 무엇이 문제입니까? –

+0

네 질문은 왜 다른가입니다. – George

답변

4

인쇄 기능이 문제입니다.

public static void main(String[] args) { 

    try { 
    MessageDigest md = MessageDigest.getInstance("MD5"); 
    md.update("password".getBytes("UTF-8")); 
    byte[] digest = md.digest(); 
    System.out.println(DatatypeConverter.printHexBinary(digest)); 

    } catch (NoSuchAlgorithmException e) { 
    e.printStackTrace(); 
    } catch (UnsupportedEncodingException e) { 
    e.printStackTrace(); 
    } 
} 

인쇄 : 다음 코드는 스프링 애플리케이션과 동일한 값을 출력하면 얻을 것이다

5F4DCC3B5AA765D61D8327DEB882CF99

1

for (byte b : digest) { 
     sb.append(String.format("%02x", b)); 
    } 

을 시도

5f4dcc3b5aa765d61d8327deb882cf99 
0

문제는 Java MessageDigest의 출력을 String으로 변환하는 방식과 관련이 있습니다.

는 진수로 바이트를 변환

System.out.print(new String(org.springframework.security.crypto.codec.Hex.encode(digest))); 

을보십시오.