2019년 8월 1일 목요일

Java MD5, SHA-256 암호화




* 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을 패딩해주는 것이다.


댓글 없음:

댓글 쓰기