안녕하세요! 암호화 두번째 'MD5'암호화를 정리해볼까 합니다.

 

이전 AES암호화를 설명하면서 돌아가는 원리를 설명해보면 어떨까 생각을 해봤는데
원리보다 조금 더 실무에 맞는 포스트로 정리하고 싶어 암호원리에 대해서는 작성하지 않았고

어떤 경우에 사용하는지? 어떻게 사용하는지? 에 대해 가볍지만

제가 실무에 적용 할 수 있고 이해 할 수 있을(이제 시작하는 초급프로그래머) 정도로 자세하게 써보겠습니다.

 

제 글을 보는 개발자님들과의 많은 소통이 있었으면 좋겠습니다.

 


 

- MD5 소개

 

MD5(Message-Digest Algorithm 5)

 

'128비트 암호화 해시 함수이며 기존 MD4를 대체하기 위해 고안되었다.'

 

라는 설명이 구글에서 찾아보면 대부분이다. 더 자세히 찾는다면 찾을 수 있지만 핵심이 아닌 것 같아 짧게 설명만 찾아보았다.

위 설명에 보면 '암호화'가 아닌 '해시' 라는 단어를 사용하는데 두 단어의 차이점을 비교하면 MD5의 특징을 바로 파악 할 수 있다.

 

 

○ 암호화(Encryption)

- 양방향 암호화 기법

- 평문을 암호화 된 문장으로 만들고, 암호화 된 문장을 다시 평문으로 만드는 복호화 기능을 가짐

 

○ 해시(Hash)

- 단방향 암호화 기법

- 평문을 암호화 된 문장으로 만듬

 

 

이 둘의 차이점은 '복호화의 가능 여부' 이다.

단방향 암호화로 원래의 데이터 찾기가 불가능 하나 같은 평문을 암호화 시킬 때 같은 해시값을 출력함으로써

사용자 자신만 알고 이 외의 관리자와 3자가 알지 못하게 하는 비밀번호 암호화나 두 파일의 무결성을 확인하는데 주로 사용한다.

 

충돌로 인해 보안이 매우 중요한 곳에서는 사용하지 않지만 간단한 작업에서는 지금도

 

- MD5 특징

1. 임의의 길이의 값을 입력 받아 128비트(32자리) 길이의 해시값으로 출력

2. 단방향 암호화로 원래의 데이터 값을 찾기 불가능 (해시계산과정에서 비트단위로 박살)

3. 고속연산이 가능

4. 충돌의 가능성이 낮아 네트워크로 전송된 큰 파일의 무결성 확인이나 비밀번호 암호화에 주로 사용

5. But, MD5의 충돌의 찾아내는데 주력하여 뚫린 경험이 있어 보안이 중요시 되는 데이터는 해시연산 암호화를 사용하지 않는다.

   (MD5의 충돌로 SHA로 대체해 사용하길 권장 하였지만 이마저도 박살 당하고 이외의 몇 개의 상위 해시 암호화도 크래커들이 박살내버림!!!!!)

 

 

- MD5 알고리즘 (Java 코드)

 

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import org.apache.commons.net.util.Base64;

public class MD5 {
	
	String result="";
	
	public String encrypt(String inputStr) throws NoSuchAlgorithmException, UnsupportedEncodingException{
	try {
		MessageDigest md5 = MessageDigest.getInstance("MD5");
		byte[] byteValue = md5.digest(inputStr.getBytes());
            
		Base64 base64EnDe = new Base64();

		result = base64EnDe.encodeToString(byteValue).replaceAll("\r\n", "");
	} catch (NoSuchAlgorithmException e) {
		e.printStackTrace();
		throw e;
	}

		return result; 
	}
}

+ Recent posts