제가 원하는 것은 해싱하고자 하는 문자열을 입력하였을 때
SHA-1 알고리즘으로 20바이트의 해싱된 문자열을 얻는 것인데요.
이것을 PHP에서는 이렇게 사용했습니다.

sha1("password");

너무 간단하죠?
이렇게 하면 "password"라는 문자열에 대한
20바이트의 해싱된 문자열이 16진수 40개로 표현이 된답니다.

근데 자바에서는 만만치가 않네요.
java.security 패키지 안에 관련 클래스인 MessageDigest가 있는데
추상클래스라서 getInstance("SHA-1")를 통해 인스턴스를 얻은 다음
이걸 이용해서 값을 얻어내는데 이게 입출력이 모두 바이트 배열입니다.

일단, 해싱된 바이트 배열은 쉽게 얻을 수 있는데
문제는 여기서 16진수 40개를 출력해내는 것입니다.
바이트 한개당 16진수 2개로 출력하는 것은
JDK5의 System.out.printf();를 사용하면 쉽긴한데요.
문제는 JDK 1.4를 이용해서 화면 출력값이 아닌 순수한 문자열을 얻는 것이지요.
흠...이것때문에 JAVA I/O 클래스들을 살펴 보는데 상당히 복잡하게 구성되어 있군요.
java.text 패키지에도 썩 쓸만한 부분은 안보이구요.

많이 사용하는 기능일텐데 기본적으로 포함이 안되어 있다니 참 이상하게 생각됩니다.
패스워드 해싱후 DB에 저장하는 건 기본일텐데요.
혹시나 해서 관련 국내서적들의 사용자 인증 부분을 찾아봤지만
비밀번호를 평문 그대로 저장하더군요.

어쩌면...
정말 어쩌면...
자바 기본 클래스 중에 포함이 되어 있는데
제가 못 찾고 있는 것일 수도 있겠죠..-_-;;

Tags // , ,

Trackback Address >> http://esheep.net/trackback/30 관련글 쓰기

  1. BlogIcon 최종욱 2007/06/26 01:20  address  modify / delete  reply

    C#에서 암호화 패키지를 써봤는데, 주로 Stream 계열으로 래핑해서 쓰더군요. Java에서도 마찬가지 아닐까 생각합니다.

    • BlogIcon guybrush 2007/07/01 01:47  address  modify / delete

      C#이 거의 자바 클론이니까 충분히 그럴 수도 있겠네요. 옛날 글인데도 관심 가져주셔서 감사합니다. 요즘은 프로그래밍을 거의 안하다보니 이런 걸로 고민한 적도 있었나 하는 생각이 드네요.