[MD5] MD5 암호화

프로그래밍/Library 2009. 3. 13. 16:52 Posted by galad
출처: 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

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