* MD5
출력값 길이 : 128bit (16진수로 32byte)
* SHA-256
출력값 길이 : 256bit (16진수로 64byte)
public class Solution {
public static void main(String[] argh) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
sc.close();
try {
//MessageDigest의 인스턴스를 가져올 때
//MD5 혹은 SHA-256으로 변경하기만 하면 해당 알고리즘의 해시 값을 얻을 수 있다.
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(str.getBytes());
byte[] digest = md.digest(); //해시된 바이트 배열
for (byte b : digest) {
System.out.printf("%02x", b);
}
} catch (Exception ex) {
throw new RuntimeException(ex);
}
}
}
바이트 배열의 요소 각각을 16진수로 변경해야 한다.
System.out.printf("%02x", b);
0 : 자리 수를 맞춰 주기 위한 0 padding 2 : 너비, 2자리로 고정
x : 16진수 포맷 출력
2자리로 하는 이유는 해시값이 들어있는 byte 배열의 요소값 하나 하나를 16진수로 변환하면서 4bit까지의 수만 들어있는 경우에는 한 자리가 부족해진다.
따라서 32byte 고정 길이를 맞춰주기 위해 0을 패딩해주는 것이다.
댓글 없음:
댓글 쓰기