본문으로 바로가기

[JAVA] Base64 인코딩, 디코딩 3가지 방법

category Backend/Java 2021. 8. 10. 15:10

목차

    1. Base64 들어가기 전에

    1.1. 인코딩이란?

    - 인코딩(encoding)은 파일에 저장된 정보의 형태나 형식을 데이터 표준화, 보안, 처리 속도 향상, 저장 공간 절약 등을 위해서 다른 형태로 변환하는 처리 혹은 그 처리 방식을 말합니다.

    - 문자나 기호들의 집합을 컴퓨터에 저장하거나 통신에 사용할 목적으로 부호화하는 방법입니다.

    1.2. 디코딩이란?

    인코딩의 반대 작업으로 복호화라고 하는데 부호화된 정보를 부호화되기 전으로 되돌리는 처리 방식을 말합니다.

    1.3. Base64

    - 64진법

    - 64가 2의 제곱수(64 = 26)이며, 2의 제곱수들에 기반한 진법들 중에서 화면에 표시되는 ASCII 문자들을 써서 표현할 수 있는 가장 큰 진법입니다.

    - Base64는 Binary Data를 텍스트로 변경하는 인코딩 방식 중 하나로 바이너리 데이터를 문자 코드에 영향을 받지 않는 공통 64개의 ASCII 영역의 문자들로 이루어진 문자열로 변경합니다.

    - 보안을 위해 사용하는 것이 아니라, 바이너리 데이터를 텍스트로 다루고 싶을 때 보편적으로 사용할 수 있는 방식입니다.

    - 신뢰할 수 없는 통신 채널을 통해 바이너리 데이터를 안전하게 전송할 수 있도록 사용하기도 합니다. 

    - 통신과정에서 바이너리 데이터의 손실을 막기 위해 사용하기도 합니다.

    1.4 ASCII 문자

    ASCII 표

     


    2. JAVA Base64 Encode, Decode

    - 자바를 이용해 Base64 인코딩 디코딩하는 방법을 3가지 소개하겠습니다.

    1. 자바 8 기본 라이브러리 (java.util.Base64)

    2. Apache Commons 라이브러리 (org.apache.commons.codec.binary.Base64)

    3. 자바 6이상 기본 라이브러리 (javax.xml.bind.DatatypeConverter)

    2.1. 자바 8 기본 라이브러리

    import java.util.Base64;
    import java.util.Base64.Encoder;
    import java.util.Base64.Decoder;
    
    public class Base64ClassImportUtil {
    
    	public static void main(String[] args) {
    
    		String testText = "Base64 Encode Decode Test";	
    		byte[] testToByte = testText.getBytes();
    		
    		//자바 8 기본 Base64 Encoder Decoder
    		Encoder encode = Base64.getEncoder();
    		Decoder decode = Base64.getDecoder();
    		
    		//Base64 인코딩
    		byte[] encodeByte = encode.encode(testToByte);
    		
    		//Base64 디코딩
    		byte[] decodeByte = decode.decode(encodeByte);
    		
    		System.out.println("인코딩 전: "+ testText);
    		System.out.println("인코딩: "+ new String(encodeByte));
    		System.out.println("디코딩: "+ new String(decodeByte));	
    		
    	}
    
    }

    2.2. Apache Commons 라이브러리

    http://mvnrepository.com/artifact/commons-codec/commons-codec/1.9

    - 다음 방식을 이용해 Base64 인코딩을 하려면 위의 링크에서 jar파일을 다운받거나 Maven을 이용해서 프로젝트에 추가해야 합니다.

    (추가하는 방법을 모르신다면 아래의 링크를 이용해 주세요)

     

    [Eclipse] 프로젝트에 jar 파일 추가하는 방법 (자바 라이브러리 추가)

    목차 0. jar파일 이란? - JAR(Java Archive, 자바 아카이브)는 여러 개의 자바 클래스 파일과, 클래스들이 이용하는 관련 리소스(텍스트, 그림 등) 및 메타데이터를 하나의 파일로 모아서 자바 플랫폼

    veneas.tistory.com

    import org.apache.commons.codec.binary.Base64;
    
    public class Base64ClassImportApache {
    
    	public static void main(String[] args) {
    		
    		String testText = "Base64 Encode Decode Test";
    		byte[] testToByte = testText.getBytes();
    
    		//Base64 인코딩
    		byte[] encodeByte = Base64.encodeBase64(testToByte);
    		
    		//Base64 디코딩
    		byte[] decodeByte = Base64.decodeBase64(encodeByte);
    		
    		System.out.println("인코딩 전: " + testText);
    		System.out.println("인코딩: " + new String(encodeByte)); 
    		System.out.println("디코딩: " + new String(decodeByte));
    		
    	}
    
    }

    2.3. 자바 6 이상 기본 라이브러리

    - java-1.8.0-openjdk-1.8.0.242 에서 작동되는 것을 확인 했습니다. 버전에 따라 실행이 안될 수도 있습니다.

    import javax.xml.bind.DatatypeConverter;
    
    public class Base64ClassImportConverter {
    
    	public static void main(String[] args) {
    		
    		String testText = "Base64 Encode Decode Test";
    		byte[] testToByte = testText.getBytes();
    
    		String encodeByte = DatatypeConverter.printBase64Binary(testToByte);
    		byte[] decodeByte = DatatypeConverter.parseBase64Binary(encodeByte);
    		
    		System.out.println("인코딩 전: " + testText);
    		System.out.println("인코딩: " + encodeByte);
    		System.out.println("디코딩: " + new String(decodeByte));	
    		
    	}
    
    }