Languages/Java2008.06.26 17:52
Java에서 MD5 hash를 하려면 MessageDigest 클래스를 이용합니다. MessageDigest 클래스에는 update 메소드가 있는데, 이 메소드를 호출할 때 마다 객체 내에 저장된 MD5 digest 값이 계속해서 갱신됩니다. 최종적으로 digest를 호출하면 그 값을 가져올 수 있습니다.

그렇기 때문에 digest를 계산하기 위해 미리 그 입력 값을 바이트 배열에 큼지막하게 잡아놓고 준비할 필요가 없습니다. 그 사실을 보여주는 테스트 코드를 잠시 보시면...

byte[] testArray = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };
  String testString = "testsecret";
  byte[] testArray2 = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
   't', 'e', 's', 't', 's', 'e', 'c', 'r', 'e', 't'
  };
 
  byte[] dst1 = new byte[16];
  byte[] dst2 = new byte[16];
 
  MessageDigest md = null, md2 =  null;
  try {
   md = MessageDigest.getInstance("MD5");
   md2 = MessageDigest.getInstance("MD5");
  } catch (NoSuchAlgorithmException e) {
   assertTrue(false);
  }
  md.update(testArray, 0, testArray.length);
  md.update(testString.getBytes());
  md2.update(testArray2, 0, testArray2.length);
  try {
   md.digest(dst1, 0, 16);
   md2.digest(dst2, 0, 16);
  } catch (DigestException e) {
   assertTrue(false);
  }
 
  for ( int i = 0; i < 16; ++i ) {
   assertTrue( dst1[i] == dst2[i] );
  }

결국 해시값을 점진적으로 계산할 수 있다는 이야기인데, 이런 특성이 프로그래밍을 좀 더 편하게 해 줍니다. MessageDigest로는 MD5만 계산할 수 있는 것은 아니고, 다른 종류의 digest도 계산할 수 있습니다. (그건 Java 레퍼런스를 참고하시길 ㅋㅋ)

신고
Posted by 이병준

소중한 의견, 감사합니다. ^^