프로그래밍(~2017)/자바

[자바] Base64 인코딩,디코딩

단세포소년 2011. 8. 9. 06:55
반응형

Java 뿐 아니라 개발자라면 한번쯤은 접해봤을법한 Base64 인코딩...
Base64의 인코딩 원리는 아래의 글을 확인해 주시고...

2009/02/23 - [정보보안/암호학] - Base64 인코딩 원리

Java 에서 Base64 인코딩을 하기 위해서는 기본적으로 Java에서 제공하는 클래스를 이용하는 방법과
Apache Commons Codec 의 Base64 클래스를 사용하는 방법이 있다.

먼저 자바에서 기본적으로 제공하는 Base64 인코딩...
static 메서드가 아니기 때문에 객체 생성후 호출을 해야하고
decoding의 경우 예외처리까지 해야하는 불편함이 있다.

import java.io.IOException;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

public class TestBase64Encoder {
	public static void main(String[] args) {
		BASE64Encoder encoder = new BASE64Encoder();
		BASE64Decoder decoder = new BASE64Decoder();

		String txtPlain = "베이스64 인코딩, 디코딩 테스트입니다.";
		String txtCipher = "";
		System.out.println("Source String : " + txtPlain);

		txtCipher = encoder.encode(txtPlain.getBytes());
		System.out.println("Encode Base64 : " + txtCipher);

		try {
			txtPlain = new String(decoder.decodeBuffer(txtCipher));
		} catch (IOException ioe) {
			ioe.printStackTrace();
		}
		System.out.println("Decode Base64 : " + txtPlain);
	}
}

다음은 Apache Commons Codec  의 Base64 클래스를 이용하는 방법이다.
이전 소스코드보다 상대적으로 많이 길이가 줄어들었으며 static 메서드라서 바로 호출이 가능하다.
물론 이전 소스코드보다 가독성 또한 뛰어나다.

import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;

public class TestCodecBase64 {
	public static void main(String[] args) {
		String txtPlain = "베이스64 인코딩, 디코딩 테스트입니다.";
		String txtCipher = "";
		System.out.println("Source String : " + txtPlain);

		txtCipher = Base64.encode(txtPlain.getBytes());
		System.out.println("Encode Base64 : " + txtCipher);

		txtPlain = new String(Base64.decode(txtCipher));
		System.out.println("Decode Base64 : " + txtPlain);
	}
}

위 두개 소스의 결과는 동일하며 아래와 같다.

Source String : 베이스64 인코딩, 디코딩 테스트입니다.
Encode Base64 : uqPAzL26NjQgwM7E2rX5LCC18MTatfkgxde9usauwNS0z7TZLg==
Decode Base64 : 베이스64 인코딩, 디코딩 테스트입니다.

출처 : http://huikyun.tistory.com/234
반응형