Java에서 Base64 인코딩과 디코딩은 데이터 전송 및 저장 시 많이 사용하는 중요한 기능이다.

그런데 JDK 버전에 따라서 사용하는 방식이 다르다고 한다.

특히 JDK 1.8에서는 Base64 클래스가 도입된 반면, 1.7에서는 이를 기본적으로 지원하지 않는다.

1.7과 1.8에서 Base64 인코딩과 디코딩을 처리하는 방법에 대해서 작성해 본다.


JDK 1.8에서의 Base64 사용

Java 8부터는 java.util.Base64 클래스가 기본으로 제공됨으로, 이를 사용해 간단하게 인/디코딩이 가능하다.

import java.net.URLDecoder;
import java.util.Base64;

String parameter = "someBase64EncodedString";
String test = URLDecoder.decode(new String(Base64.getDecoder().decode(parameter), "utf-8"), "utf-8");

JDK 1.7에서 Base64 처리 방법

Java 7에서는 java.util.Base64 클래스를 사용할 수 없다.

그렇기에 2가지 방법 중 하나를 택하여 사용하면 된다.

1. Apache Commons Codec 라이브러리 사용

2. Java 내장 클래스를 사용한 직접 구현

 

1. Apache Commons Codec 라이브러리 사용

Maven을 통해 프로젝트에 추가할 수 있다.

<!-- Maven Dependency 추가 -->
<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
    <version>1.10</version> <!-- JDK 1.7 호환 가능한 버전 -->
</dependency>

 

import org.apache.commons.codec.binary.Base64;
import java.net.URLDecoder;

String parameter = "someBase64EncodedString";
byte[] decodedBytes = Base64.decodeBase64(parameter);
String test = URLDecoder.decode(new String(decodedBytes, "utf-8"), "utf-8");

 

2. Java 7에서 직접 Base64 인/디코딩 구현

외부 라이브러리를 사용하지 않고 JDK 1.7 내에서 직접 구현하는 방식이다.

클래스는 sun.misc.BASE64Decoder와 sun.misc.BASE64Encoder 클래스를 사용한다.

(Java 8 이후에는 공식적으로 사용 불가함)

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import java.net.URLDecoder;
import java.io.IOException;

public class Base64Example {
    public static String encode(String data) {
        BASE64Encoder encoder = new BASE64Encoder();
        return encoder.encode(data.getBytes());
    }

    public static String decode(String data) throws IOException {
        BASE64Decoder decoder = new BASE64Decoder();
        byte[] decodedBytes = decoder.decodeBuffer(data);
        return new String(decodedBytes, "utf-8");
    }
}

반응형