출처: http://edit.tistory.com/tag/MD5%EC%95%94%ED%98%B8%ED%99%94
http://www.javapattern.info/50
MD5 는 해시 함수의 일종입니다..
해시 함수는.. 기본적으로 복호화를 목적으로 하지 않습니다.
http://ko.wikipedia.org/wiki/%ED%95%B4%EC%8B%9C_%ED%95%A8%EC%88%98
복호화는 불가능하다고 생각하시는게 편할 겁니다.
복호화는 안된단다... 원래 그렇게 만들어진게 아니라네...
그럼 ID/PW를 암호화할 필요가 있나?
▶ SecurityUtil.java
위 의 클래스에 해당 스트링값을 던지게 되면 실제 digest된 결과 문자열을 되돌려 줄수 있도록 처리하였는데 이것이 끝이냐~ 아닙니다. 실제 던져진 해쉬함수에 의한 결과를 System.out으로 찍게 되면 찌그러진 코드형태로 나오게 되는데 이것을 우리 눈으로 비교하여 String문자비교를 통하여 추후 사용할 수 있도록 하려면 Base64 인코딩을 시도해야 합니다.
그 유틸리티 클래스는 아래와 같습니다.
▶ Base64Util.java
String passwd = SecurityUtil.getCryptoMD5String("Carouser");
http://www.javapattern.info/50
MD5 는 해시 함수의 일종입니다..
해시 함수는.. 기본적으로 복호화를 목적으로 하지 않습니다.
http://ko.wikipedia.org/wiki/%ED%95%B4%EC%8B%9C_%ED%95%A8%EC%88%98
복호화는 불가능하다고 생각하시는게 편할 겁니다.
복호화는 안된단다... 원래 그렇게 만들어진게 아니라네...
그럼 ID/PW를 암호화할 필요가 있나?
▶ SecurityUtil.java
import java.security.*; public class SecurityUtil { /** * byte[] ret = HashUtil.digest("MD5", "abcd".getBytes()); * 처럼 호출 */ public static byte[] digest(String alg, byte[] input) throws NoSuchAlgorithmException { MessageDigest md = MessageDigest.getInstance(alg); return md.digest(input); } public static String getCryptoMD5String(String inputValue) throws Exception { if( inputValue == null ) throw new Exception("Can't conver to Message Digest 5 String value!!"); byte[] ret = digest("MD5", inputValue.getBytes()); String result = Base64Util.encode(ret); return result; } } |
위 의 클래스에 해당 스트링값을 던지게 되면 실제 digest된 결과 문자열을 되돌려 줄수 있도록 처리하였는데 이것이 끝이냐~ 아닙니다. 실제 던져진 해쉬함수에 의한 결과를 System.out으로 찍게 되면 찌그러진 코드형태로 나오게 되는데 이것을 우리 눈으로 비교하여 String문자비교를 통하여 추후 사용할 수 있도록 하려면 Base64 인코딩을 시도해야 합니다.
그 유틸리티 클래스는 아래와 같습니다.
▶ Base64Util.java
import sun.misc.*; import java.io.*; /** * * Filename : Base64Util.java * Class : Base64Util * Function : Base64 Encoding/Decoding을 수행하는 클래스 * Comment : * History : 2000-08-16 2:48오후 * * @version 1.0 * @author carouser */ public class Base64Util { public Base64Util() {} /** * Base64Encoding을 수행한다. binany in ascii out * * @param encodeBytes encoding할 byte array * @return encoding 된 String */ public static String encode(byte[] encodeBytes) { BASE64Encoder base64Encoder = new BASE64Encoder(); ByteArrayInputStream bin = new ByteArrayInputStream(encodeBytes); ByteArrayOutputStream bout = new ByteArrayOutputStream(); byte[] buf = null; try{ base64Encoder.encodeBuffer(bin, bout); } catch(Exception e) { System.out.println("Exception"); e.printStackTrace(); } buf = bout.toByteArray(); return new String(buf).trim(); } /** * Base64Decoding 수행한다. binany out ascii in * * @param strDecode decoding할 String * @return decoding 된 byte array */ public static byte[] decode(String strDecode) { BASE64Decoder base64Decoder = new BASE64Decoder(); ByteArrayInputStream bin = new ByteArrayInputStream(strDecode.getBytes()); ByteArrayOutputStream bout = new ByteArrayOutputStream(); byte[] buf = null; try { base64Decoder.decodeBuffer(bin, bout); } catch(Exception e) { System.out.println("Exception"); e.printStackTrace(); } buf = bout.toByteArray(); return buf; } } |
String passwd = SecurityUtil.getCryptoMD5String("Carouser");
'프로그래밍 > Library' 카테고리의 다른 글
[Subclipse] ignore (0) | 2009.04.02 |
---|---|
[firebug] 파이어버그 가이드 (0) | 2009.03.20 |
[BASE64] BASE64 인코딩 (0) | 2009.02.27 |
[가니메데] 이클립스 가니메데에서 WTP사용하기 (0) | 2009.02.03 |
[Cognos] 기본개념 (0) | 2009.01.29 |