Base64 是一種將二進制數據轉換為可打印 ASCII 字符的編碼方案,常用於 HTTP 傳輸、郵件附件、URL 參數等場景。它不是加密算法,僅是編碼格式,不提供安全性保障。
= 填充Java 8 引入 java.util.Base64,提供標準、URL 安全、MIME 三種編碼器,請勿再使用 sun.misc.BASE64Encoder 等內部類。
import java.util.Base64;
import java.nio.charset.StandardCharsets;
public class Base64Util {
private static final Base64.Encoder STANDARD_ENCODER = Base64.getEncoder();
private static final Base64.Decoder STANDARD_DECODER = Base64.getDecoder();
private static final Base64.Encoder URL_ENCODER = Base64.getUrlEncoder();
private static final Base64.Decoder URL_DECODER = Base64.getUrlDecoder();
/** 標準 Base64 編碼 */
public static String encode(String input) {
return STANDARD_ENCODER.encodeToString(input.getBytes(StandardCharsets.UTF_8));
}
/** 標準 Base64 解碼 */
public static String decode(String input) {
byte[] bytes = STANDARD_DECODER.decode(input);
return new String(bytes, StandardCharsets.UTF_8);
}
/** URL 安全編碼(無填充,+/-/_ 替換) */
public static String encodeUrlSafe(String input) {
return URL_ENCODER.withoutPadding().encodeToString(input.getBytes(StandardCharsets.UTF_8));
}
/** URL 安全解碼 */
public static String decodeUrlSafe(String input) {
byte[] bytes = URL_DECODER.decode(input);
return new String(bytes, StandardCharsets.UTF_8);
}
public static void main(String[] args) {
String original = "Hello, 中文測試!";
String encoded = encode(original);
String decoded = decode(encoded);
System.out.println("原文:" + original);
System.out.println("標準編碼:" + encoded);
System.out.println("解碼後:" + decoded);
System.out.println("URL安全編碼:" + encodeUrlSafe(original));
}
}
| 變體 | 特點 | 適用場景 |
|---|---|---|
| 標準 Base64 | 含 + / = | 郵件、XML、JSON 傳輸 |
| URL Safe | +→-,/→_,無填充 | URL 參數、Token、Cookie |
| MIME | 每 76 字符換行 | 郵件長文本傳輸 |
java.util.Base64(Java 8+)掌握 Base64 的本質與正確用法,能有效避免傳輸協議兼容性問題,是 Java 開發者必備的基礎技能。