Javaでは、Base64エンコード/デコードを標準APIだけで簡単に扱えます。
ファイルデータやバイナリ情報を文字列として送受信したい場面(API通信・設定値保存・認証情報など)で、Base64は頻繁に利用されます。
本記事では、Java標準のBase64クラスの使い方を中心に、
基本から実務での注意点までをわかりやすく解説します。
Base64とは?
Base64とは、バイナリデータを英数字のみの文字列に変換するエンコード方式です。
-
バイナリ → テキスト変換
-
暗号化ではない(可逆変換)
-
メール、HTTP、JSON、XMLなどで安全に扱える
よくある利用シーン
-
画像・PDFなどのバイナリデータをAPIで送信
-
認証情報(Basic認証)
-
設定ファイル・JSON内への埋め込み
JavaでBase64を扱う方法(基本)
Java 8以降では、java.util.Base64 クラスが標準提供されています。
|
1 2 |
import java.util.Base64;<code class="whitespace-pre! language-java"> |
文字列をBase64エンコードする
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import java.util.Base64; import java.nio.charset.StandardCharsets; public class Base64EncodeSample { public static void main(String[] args) { String original = "Hello World"; String encoded = Base64.getEncoder() .encodeToString(original.getBytes(StandardCharsets.UTF_8)); System.out.println(encoded); } } |
実行結果例
ポイント
-
文字コードは必ず
StandardCharsets.UTF_8を指定 -
encodeToString()で文字列として取得可能
Base64文字列をデコードする
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import java.util.Base64; import java.nio.charset.StandardCharsets; public class Base64DecodeSample { public static void main(String[] args) { String encoded = "SGVsbG8gV29ybGQ="; byte[] decodedBytes = Base64.getDecoder().decode(encoded); String decoded = new String(decodedBytes, StandardCharsets.UTF_8); System.out.println(decoded); } } |
実行結果
|
1 2 |
Hello World<code class="whitespace-pre!"> |
URLセーフなBase64(URL-safe)
URLやクエリパラメータで使用する場合は、URLセーフ版Base64を使います。
通常版との違い
| 種類 | 特徴 |
|---|---|
| 通常 | + / = を含む |
| URLセーフ | - _ を使用 |
MIME用Base64(改行付き)
メールや長文データ向けのBase64です。
-
76文字ごとに改行が入る
-
メール本文などで使用される
ファイルをBase64エンコードする例
よくある注意点・ハマりどころ
① Base64は暗号化ではない
-
誰でもデコード可能
-
パスワード保存には不向き
② 文字コード不一致
|
1 2 |
new String(bytes); // NG<code class="whitespace-pre! language-java"> |
→ 環境依存になるため必ず UTF-8 を指定
③ 改行入りBase64のデコード失敗
-
MIME形式は改行を含む
-
URL/通常デコーダでは失敗することがある
どのBase64エンコーダを使うべき?
| 用途 | 推奨 |
|---|---|
| 通常の文字列・API | getEncoder() |
| URL・クエリ | getUrlEncoder() |
| メール・長文 | getMimeEncoder() |
まとめ
-
Java 8以降は
java.util.Base64を使えばOK -
外部ライブラリは不要
-
用途に応じて 通常 / URL / MIME を使い分ける
-
Base64は「変換」であり「暗号」ではない

