2017-09-29 1 views
0

SHA-256을 사용하여 문자열을 해시하려고했지만 결과가 잘못되어 특수 문자가 포함되어 있습니다.SHA-256 문자열을 hasing 한 후 잘못된 결과가 발생했습니다.

코드 :

String password = "test"; 
MessageDigest md = MessageDigest.getInstance("SHA-256"); 
byte[] sha256Result = md.digest(password.getBytes(StandardCharsets.UTF_8)); 
String result = new String(sha256Result, StandardCharsets.UTF_8); 

결과 문자열 :

��Ё�L}e�/��Z���O+�,�]l�� 
+0

반환되는 배열은 해시의 원시 바이트이며, 16 진수로 표시하려면 [이 질문] (https://stackoverflow.com/questions)을 선택해야합니다./9655181/변환 방법 - 바이트 배열에서 16 진수 문자열 인 자바). – Haem

답변

1

해싱이 제대로 procceed,하지만 결과는 바이트의 배열로 구성되어있다. 읽을 수 있도록하려면 StringBuffer을 사용하십시오. 전환의 예로서 example on Mkyong's webpage을 살펴보십시오.

StringBuffer sb = new StringBuffer(); 
    for (int i = 0; i < sha256Result.length; i++) { 
    sb.append(Integer.toString((sha256Result[i] & 0xff) + 0x100, 16).substring(1)); 
} 
1

내가 해시하는 방식이 괜찮다고 생각합니다. 다음과 같이 16 진수 문자열로 사용하려는 경우 :

관련 문제