2014년 10월 13일 월요일

android java MD5 생성

HASH 함수 중에 MD5를 많이 사용해서 정리해 보았다.

검색하면 많은 사용법이 나오는데 input 이 String인경우 아래 방법 추천한다.


public static String getMD5EncryptedString(String encTarget){
        MessageDigest mdEnc = null;
        try {
            mdEnc = MessageDigest.getInstance("MD5");
        } catch (NoSuchAlgorithmException e) {
            System.out.println("Exception while encrypting to md5");
            e.printStackTrace();
        } // Encryption algorithm
        mdEnc.update(encTarget.getBytes(), 0, encTarget.length());
        String md5 = new BigInteger(1, mdEnc.digest()).toString(16);
        while ( md5.length() < 32 ) {
            md5 = "0"+md5;
        }
        return md5;
    }

출처:http://stackoverflow.com/questions/13152736/how-to-generate-an-md5-checksum-for-a-file-in-android

특히 while 루프부분이 있는데 32 byte보다 작게 나오는경우 앞에 0을 붙여 준다.
        while ( md5.length() < 32 ) {
            md5 = "0"+md5;
        }

즉, BigInteger의 리턴값이 "10" 이라면 32자리까지 맞게끔 "0"을 더 붙여준다는 의미이다. 그래서 한결 같이 같은 길이를 리턴하도록 한다.
(참고로 BigInteger의 리턴값은 소문자이다. "FF"의 경우 "(32개의0)ff" 이다.)
BigInteger의 1은 입력되는 mdEnc.digest()함수로 넘어오는 data가 BigInteger숫자로 변환시 부호가 (+)양의 의미를 지니는 것을 뜻한다.
String md5 = new BigInteger(1, mdEnc.digest()).toString(16);


댓글 없음:

댓글 쓰기