목차
0. MD5 암호화 들어가기 전에
0.1. MD5 암호화 란?
- Message-Digest algorithm 5
- MDC(Modification Detection Code:변경 탐지 코드)
- 단방향 알고리즘
- 1991년에 로널드 라이베스트가 이전에 쓰이던 MD4를 대체하기 위해 고안된 알고리즘이다.
- 임의의 길이의 메시지(variable-length message)를 입력받아, 128비트짜리 고정 길이의 값을 출력합니다.
- 입력 메시지의 길이 제한이 없습니다.
- 주로 프로그램이나 파일이 원본 그대로인지를 확인하는 무결성 검사 등에 사용됩니다.
- 현재 MD5 알고리즘은 보안 관련 용도로 권장하지 않습니다.
0.2. MessageDigest Class
- java.security.MessageDigest
- MessageDigest 클래스는 MD5 또는 SHA 등의 메시지 암호화 알고리즘의 기능을 제공합니다.
사용할 주요 메소드
(더 많은 메소드는 자바 API Document를 참고해 주세요)
1. MD5 암호화
- MD5 암호화 + Hex(16진수) 인코딩, MD5 암호화 + Base64 인코딩을 사용했습니다.
- 인코딩 라이브러리는 기본 라이브러리(DatatypeConverter) 또는 다운로드하여 사용할 수 있는 외부 라이브러리(Apache Commons)를 사용하시면 됩니다.
- 기본 라이브러리(DatatypeConverter)는 java-1.8.0-openjdk-1.8.0.242 에서 작동되는 것을 확인 했습니다. 버전에 따라 실행이 안될 수도 있습니다.
- 인코딩은 문자나 기호들의 집합을 컴퓨터에 저장하거나 통신에 사용할 목적으로 사용합니다.
Apache Commons 라이브러리 링크: http://mvnrepository.com/artifact/commons-codec/commons-codec/1.9
프로젝트에 다운로드한 라이브러리 추가하기
1.1. MD5 암호화 + Hex(16 진수) String
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import javax.xml.bind.DatatypeConverter;
import org.apache.commons.codec.binary.Hex;
import org.apache.commons.codec.binary.Base64;
public class Md5Class {
public static void main(String[] args) throws NoSuchAlgorithmException {
String text = "md5 Test Text";
System.out.println("md5 암호화 + Hex: "+ md5AndHex(text) );
System.out.println("md5 암호화 + Hex: "+ md5AndHex_apache(text) );
}
//MD5 암호화와 Hex(16진수) 인코딩
public static String md5AndHex(String plainText) throws NoSuchAlgorithmException {
//MessageDigest 인스턴스 생성(MD5)
MessageDigest md = MessageDigest.getInstance("MD5");
//해쉬값 업데이트
md.update(plainText.getBytes());
//Byte To Hex String
return DatatypeConverter.printHexBinary(md.digest());
}
//MD5 암호화와 Hex(16진수) 인코딩 apache.commons
public static String md5AndHex_apache(String plainText) throws NoSuchAlgorithmException {
//MessageDigest 인스턴스 생성(MD5)
MessageDigest md = MessageDigest.getInstance("MD5");
//해쉬값 업데이트
md.update(plainText.getBytes());
//Byte To Hex String(apache)
return Hex.encodeHexString(md.digest());
}
}
결과 값:
md5 암호화 + Hex: 5EC9B1823912C4CBA4CF38C588C166DB
md5 암호화 + Hex: 5ec9b1823912c4cba4cf38c588c166db
★주의: 16진수 변환 시 DatatypeConverter는 결과 값으로 대문자로 출력하지만 Apache Commons는 소문자로 출력합니다.
1.2. MD5 암호화 + Base64 String
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import javax.xml.bind.DatatypeConverter;
import org.apache.commons.codec.binary.Hex;
import org.apache.commons.codec.binary.Base64;
public class Md5Class {
public static void main(String[] args) throws NoSuchAlgorithmException {
String text = "md5 Test Text";
System.out.println("md5 암호화 + Base64: "+ md5AndBase64(text) );
System.out.println("md5 암호화 + Base64: "+ md5AndBase64_apache(text) );
}
//MD5 암호화와 Base64 인코딩
public static String md5AndBase64(String plainText) throws NoSuchAlgorithmException {
//MessageDigest 인스턴스 생성(MD5)
MessageDigest md = MessageDigest.getInstance("MD5");
//해쉬값 업데이트
md.update(plainText.getBytes());
//Byte To Base64 String
return DatatypeConverter.printBase64Binary(md.digest());
}
//MD5 암호화와 Base64 인코딩 apache.commons
public static String md5AndBase64_apache(String plainText) throws NoSuchAlgorithmException {
//MessageDigest 인스턴스 생성(MD5)
MessageDigest md = MessageDigest.getInstance("MD5");
//해쉬값 업데이트
md.update(plainText.getBytes());
//Byte To Base64 String(apache)
return Base64.encodeBase64String(md.digest());
}
}
결과 값:
md5 암호화 + Base64: XsmxgjkSxMukzzjFiMFm2w==
md5 암호화 + Base64: XsmxgjkSxMukzzjFiMFm2w==
'Backend > Java' 카테고리의 다른 글
[JAVA] 자바 AES 암호화 하기 (AES-128, AES-192, AES-256) (0) | 2021.08.28 |
---|---|
[JAVA] 자바 Hmac 암호화 하기 (HMAC-MD5, HMAC-SHA256, HMAC-SHA512) (2) | 2021.08.16 |
[JAVA] 자바 SHA 암호화 하기 (SHA1, SHA2, SHA3) (0) | 2021.08.15 |
[JAVA] Hex 인코딩 디코딩 방법 (16 진수) (0) | 2021.08.13 |
[JAVA] Base64 인코딩, 디코딩 3가지 방법 (0) | 2021.08.10 |