Base64 인코딩 및 디코딩

JavaBeginner
지금 연습하기

소개

이 랩에서는 java.util.Base64 클래스와 Apache Commons 라이브러리를 사용하여 Java 에서 Base64 데이터를 인코딩하고 디코딩하는 방법을 배웁니다.

새로운 Java 파일 생성

이 단계에서는 새로운 Java 파일을 생성합니다. 터미널을 열고 다음 명령을 실행하여 새로운 Java 파일을 생성합니다.

touch ~/project/Base64Encoding.java

이 명령은 ~/project 디렉토리 내에 Base64Encoding.java라는 새 파일을 생성합니다. 원하는 이름을 사용할 수 있지만, .java로 끝나도록 해야 합니다.

기본 인코딩 및 디코딩

이 단계에서는 기본 인코딩 및 디코딩에 대해 배웁니다.

  • 기본 인코더는 인코딩 및 디코딩에 Base64 Alphabet을 사용합니다.
  • 인코딩된 문자열에 줄 바꿈 문자를 추가하지 않습니다.
  • 간단한 Base64.Encoder를 반환하는 getEncoder() 메서드를 사용합니다.
  • 그런 다음, encodeToString() 메서드를 사용하여 문자열을 인코딩합니다.

인코딩된 문자열을 디코딩하기 위해 getDecoder() 메서드에서 반환된 Base64.Decoder를 사용합니다.

  • 디코더의 decode() 메서드를 사용합니다.

문자열을 인코딩하고 디코딩하려면 아래 코드 블록을 사용하십시오.

import java.util.Base64;

public class Base64Encoding {
    public static void main(String[] args) {
        String strToEncode = "Hello World";
        byte[] bytesToEncode = strToEncode.getBytes(); // convert the string to a byte array

        // Encoding
        String encodedStr = Base64.getEncoder().encodeToString(bytesToEncode);
        System.out.println("Encoded String: " + encodedStr);

        // Decoding
        byte[] decodedByteArr = Base64.getDecoder().decode(encodedStr);
        String decodedStr = new String(decodedByteArr);
        System.out.println("Decoded String: " + decodedStr);
    }
}

코드를 컴파일하고 실행하려면 터미널에서 다음 명령을 실행하십시오.

javac Base64Encoding.java && java Base64Encoding

패딩 없는 Base64 인코딩

이전 단계에서 인코딩이 인코딩된 문자열의 끝에 패딩 문자 ( = ) 를 추가하는 것을 보았습니다. 이 단계에서는 패딩 문자 없이 인코딩하는 방법을 배웁니다.

패딩 없이 문자열을 인코딩하려면 다음 코드 블록을 사용하십시오.

import java.util.Base64;

public class Base64Encoding {
    public static void main(String[] args) {
        String strToEncode = "Java";
        byte[] bytesToEncode = strToEncode.getBytes(); // convert the string to a byte array

        // Encoding without padding
        String encodedStr = Base64.getEncoder().withoutPadding().encodeToString(bytesToEncode);
        System.out.println("Encoded String: " + encodedStr);
    }
}

코드를 컴파일하고 실행하려면 터미널에서 다음 명령을 실행하십시오.

javac Base64Encoding.java && java Base64Encoding

URL 및 파일 이름 안전 인코딩 및 디코딩

이 단계에서는 URL 및 파일 이름 안전한 인코딩 및 디코딩에 대해 배웁니다.

Base64 클래스는 URL 및 파일 이름 안전한 Base64 Alphabet을 사용하여 URL 인코딩 및 디코딩을 처리합니다.

  • Base64 URL 인코더를 얻기 위해 getUrlEncoder() 메서드를 사용합니다.
  • 그런 다음, 이전 섹션에서 했던 것처럼 encodeToString() 메서드를 사용합니다.

마찬가지로, URL 디코더를 반환하는 getUrlDecoder() 메서드가 있습니다.

  • 디코딩을 위해 이 디코더와 함께 decode() 메서드를 사용할 수 있습니다.

URL 을 인코딩하고 디코딩하려면 아래 코드 블록을 사용하십시오.

import java.util.Base64;

public class Base64Encoding {
    public static void main(String[] args) {
        String urlToEncode = "https://go.java/?intcmp=gojava-banner-java-com";

        // Encoding
        String encodedUrl = Base64.getUrlEncoder().encodeToString(urlToEncode.getBytes());
        System.out.println("Encoded URL: " + encodedUrl);

        // Decoding
        byte[] decodedUrlBytes = Base64.getUrlDecoder().decode(encodedUrl);
        String decodedUrl = new String(decodedUrlBytes);
        System.out.print("Decoded URL: " + decodedUrl);
    }
}

코드를 컴파일하고 실행하려면 터미널에서 다음 명령을 실행하십시오.

javac Base64Encoding.java && java Base64Encoding

MIME 인코딩 및 디코딩

이 단계에서는 MIME 인코딩 및 디코딩에 대해 배웁니다.

  • Base64 클래스는 인코딩 및 디코딩 작업에 Base64 Alphabet 을 사용합니다.
  • 인코딩된 출력에서 각 줄은 최대 76 개의 문자를 포함합니다.
  • 각 줄은 줄 구분 기호로 캐리지 리턴 ( \r ) 다음에 라인 피드 ( \n ) 로 끝납니다.

인코딩을 위해 getMimeEncoder()encodeToString() 메서드를 사용할 수 있습니다.
디코딩하려면 getMimeDecoder() 메서드를 사용하여 디코더를 얻은 다음 decode() 메서드를 사용합니다.

MIME 데이터를 인코딩하고 디코딩하려면 다음 코드 블록을 사용하십시오.

import java.util.Base64;
import java.util.UUID;

public class Base64Encoding {
    public static void main(String[] args) {
        // Creating a MIME input for encoding
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 10; ++i) {
            sb.append(UUID.randomUUID().toString());
        }
        // Encoding
        byte[] bytes = sb.toString().getBytes();
        String mimeEncodedStr = Base64.getMimeEncoder().encodeToString(bytes);
        System.out.println("Encoded String: " + mimeEncodedStr);

        // Decoding
        byte[] mimeDecodedBytes = Base64.getMimeDecoder().decode(mimeEncodedStr);
        String mimeDecodedStr = new String(mimeDecodedBytes);
    }
}

코드를 컴파일하고 실행하려면 터미널에서 다음 명령을 실행하십시오.

javac Base64Encoding.java && java Base64Encoding

Apache Commons 라이브러리 사용법

이 단계에서는 Base64 데이터를 인코딩하고 디코딩하기 위해 Apache Commons 라이브러리를 사용하는 방법을 배웁니다.

Apache Commons 라이브러리는 org.apache.commons.codec.binary 패키지 내에 Base64 클래스를 제공합니다.

  • 이 클래스는 다양한 인코딩 스키마에 대한 다섯 가지 다른 생성자를 포함합니다.
  • Base64 인스턴스를 생성한 후, 문자열 바이트에 대해 encode()decode() 메서드를 사용하여 인코딩 및 디코딩을 수행할 수 있습니다.

Apache Commons Base64 클래스를 사용하여 문자열을 인코딩하고 디코딩하려면 다음 코드 블록을 사용하십시오.

import org.apache.commons.codec.binary.Base64;

public class Base64Encoding {
    public static void main(String[] args) {

        Base64 base64 = new Base64();

        // Encoding
        String strToEncode = "Hello World";
        byte[] encodedBytes = base64.encode(strToEncode.getBytes());
        String encodedStr = new String(encodedBytes);
        System.out.println("Encoded String: " + encodedStr);

        // Decoding
        byte[] decodedByteArr = base64.decode(encodedStr.getBytes());
        String decodedStr = new String(decodedByteArr);
        System.out.println("Decoded String: " + decodedStr);

        // Directly access the API by using the static methods encodeBase64() and decodeBase64()
        String strToEncode2 = "Hello World";
        String encodedStr2 = new String(Base64.encodeBase64(strToEncode.getBytes()));
        String decodedStr2 = new String(Base64.decodeBase64(encodedStr.getBytes()));
    }
}

코드를 컴파일하고 실행하려면 터미널에서 다음 명령을 실행하십시오.

javac -cp commons-codec-1.15.jar Base64Encoding.java && java -cp commons-codec-1.15.jar:. Base64Encoding

참고: 이 코드를 실행하려면 Apache Commons Codec 라이브러리의 .jar 파일을 다운로드하여 클래스 경로에 가져와야 합니다. 위의 명령에서 라이브러리의 클래스 경로를 지정하기 위해 -cp commons-codec-1.15.jar를 추가했습니다.

요약

이 랩에서는 java.util.Base64 클래스와 Apache Commons 라이브러리를 사용하여 Java 에서 Base64 데이터를 인코딩하고 디코딩하는 방법을 배웠습니다. 기본 (Basic), URL, 파일 이름 안전 (Filename safe) 및 MIME 의 세 가지 다른 Base64 인코딩 및 디코딩 스키마를 다루었습니다.