소개
이 랩에서는 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 인코딩 및 디코딩 스키마를 다루었습니다.



