JAVA MD5, SHA-256 해쉬코드 얻기
얼마전 천만건이 넘는 문장의 중복을 체크해야 되는 작업을 진행하였다. 중복 체크 알고리즘들은 많이 있지만, 문제는 중복을 확인하기 위해서는 그 모든 문장들을 메모리에 올려야 하는데, 그 많은 데이터가 다 올라가느냐였다. 문장의 길이가 워낙 긴게 많아서…
결국 문장을 MD5 해쉬 값으로 바꾸어 중복을 체크함으로써 이문제를 해결 할 수 있었다.
MD5 (Message-Digest algorithm 5)
MD5는 메세지 축약 알고리즘으로써, 파일 무결성 검사용도로 많이 쓰이고 있다.
128bit 의 해쉬를 제공하며, 암호와와 복호화를 통하여 보안용도로도 많이 쓰인다.
하지만 암호화 결함이 발견되어 보안 용도로 사용할때에는 SHA와 같은 다른 알고리즘을 사용하는것이 권장되고 있다고 한다.
또한, 자바에서는 현재 복호화를 할 수 있는 방법은 없는듯하다. 자바에서 사용회는 MD5는 해시 함수로써, 기본적으로 복호화를 목적으로 하지 않는다는 것이 이유중에 하나라고도 한다. (뭐, 사실 방법이야 있겠지만, 나는 모르겠다)
SHA-256 (Sechre Hash Standard)
MD5와 뭐 거의 동일하지만 160bit 의 해쉬를 제공한다. SHA는 256 뿐만아니라, SHA-0, SHA-1 과 같이 여러 암호학적 해쉬가 존재한다.
자바에서 MD5 와 SHA의 사용은 매우 쉽다. 바로, MessageDigest 클래스를 사용하면 된다
MD5 와 SHA-256 메서드 소스코드
// MD5
<div> public String testMD5(String str){ String MD5 = ""; try{ MessageDigest md = MessageDigest.getInstance("<b>MD5</b>"); md.update(str.getBytes()); byte byteData[] = md.digest(); StringBuffer sb = new StringBuffer(); for(int i = 0 ; i < byteData.length ; i++){ sb.append(Integer.toString((byteData[i]&0xff) + 0x100, 16).substring(1)); } MD5 = sb.toString(); }catch(NoSuchAlgorithmException e){ e.printStackTrace(); MD5 = null; } return MD5; } </div> <div> <b>// SHA-256</b> </div> <div> public String testSHA256(String str){ String SHA = ""; try{ MessageDigest sh = MessageDigest.getInstance("<b>SHA-256</b>"); sh.update(str.getBytes()); byte byteData[] = sh.digest(); StringBuffer sb = new StringBuffer(); for(int i = 0 ; i < byteData.length ; i++){ sb.append(Integer.toString((byteData[i]&0xff) + 0x100, 16).substring(1)); } SHA = sb.toString(); }catch(NoSuchAlgorithmException e){ e.printStackTrace(); SHA = null; } return SHA; }