JavaのBase64のエンコードとデコードのサンプルです。
Java標準のBase64クラスを使用します。
| 確認環境 ・Java 8 |
目次
- Base64クラス
- 1.「基本」のサンプル
- 2.「URLおよびファイル名で安全」のサンプル
- 3.「MIME」のサンプル
- RFC4648の表1のBase64アルファベット
- RFC2045の表1のBase64アルファベット
- RFC4648の表2のBase64アルファベット
Base64クラス
- Base64でエンコード/デコードします。
- Base64とは、64種類の英数字で行うエンコード方式です。通信などで使われます。
- Base64クラスは、次の3つのBase64をサポートしています。
「基本」
「URLおよびファイル名で安全」
「MIME」 - Java8で標準機能として追加されました。
- 以下はJava8 API仕様のBase64クラスのリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/util/Base64.html
1.「基本」のサンプル
| public static Base64.Encoder getEncoder() |
| public static Base64.Decoder getDecoder() |
- getEncoderメソッドとgetDecoderメソッドを使用します。
- RFC4648の表1およびRFC2045の表1の「Base64アルファベット」を使用します。
- エンコーダは改行文字を追加しません。
- デコーダは、base64アルファベットの範囲外の文字を含むデータを拒否します。
コード
「基本」のサンプルコードです。
package test1;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class Test1 {
public static void main(String[] args) {
Charset charset = StandardCharsets.UTF_8;
String moji = "abcあいう123";
// エンコード
byte[]a = Base64.getEncoder()
.encode(moji.getBytes(charset));
String en1 = new String(a, charset);
System.out.println("en1= " + en1);
// en1= YWJj44GC44GE44GGMTIz
// デコード
byte[]b = Base64.getDecoder().decode(a);
String de1 = new String(b,charset);
System.out.println("de1= " + de1);
// de1= abcあいう123
}
}
14行目のencodeメソッドの引数はバイト配列です。
20行目のdecodeメソッドの引数はバイト配列です。
15,16,21,22行目はバイト配列を復号化して文字列を表示しています。
以下はバイト配列の作成と復号のリンクです。
Java バイト配列の作成と復号のサンプル
2.「URLおよびファイル名で安全」のサンプル
| public static Base64.Encoder getUrlEncoder() |
| public static Base64.Decoder getUrlDecoder() |
- getUrlEncoderメソッドとgetUrlDecoderメソッドを使用します。
- RFC4648の表2の「URLおよびファイル名で安全なBase64アルファベット」を使用します。
→プラス(+)とスラッシュ(/)を使用しません。 - エンコーダは改行文字を追加しません。
- デコーダは、base64アルファベットの範囲外の文字を含むデータを拒否します。
コード
「URLおよびファイル名で安全」のサンプルコードです。
package test1;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class Test1 {
public static void main(String[] args) {
Charset charset = StandardCharsets.UTF_8;
String moji = "abcあいう123";
// エンコード
byte[]a = Base64.getUrlEncoder()
.encode(moji.getBytes(charset));
String en1 = new String(a, charset);
System.out.println("en1= " + en1);
// en1= YWJj44GC44GE44GGMTIz
// デコード
byte[]b = Base64.getUrlDecoder().decode(a);
String de1 = new String(b,charset);
System.out.println("de1= " + de1);
// de1= abcあいう123
}
}
14行目のencodeメソッドの引数はバイト配列です。
20行目のdecodeメソッドの引数はバイト配列です。
15,16,21,22行目はバイト配列を復号化して文字列を表示しています。
以下はバイト配列の作成と復号のリンクです。
Java バイト配列の作成と復号のサンプル
3.「MIME」のサンプル
| public static Base64.Encoder getMimeEncoder(int lineLength,byte[] lineSeparator) |
| public static Base64.Decoder getMimeDecoder() |
- getMimeEncoderメソッドとgetMimeDecoderメソッドを使用します。
- RFC2045の表1の「Base64アルファベット」を使用します。
- エンコードされた出力は、それぞれが76文字以下で、キャリッジ・リターン「\r」の直後に改行「\n」を続けたものが行区切り文字となります。
- デコーダは、base64アルファベット表で見つからない行区切り文字またはその他の文字はすべて無視します。
コード
「MIME」のサンプルコードです。
package test1;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class Test1 {
public static void main(String[] args) {
Charset charset = StandardCharsets.UTF_8;
String moji = "abcあいう123";
// エンコード
byte[]a = Base64.getMimeEncoder()
.encode(moji.getBytes(charset));
String en1 = new String(a, charset);
System.out.println("en1= " + en1);
// en1= YWJj44GC44GE44GGMTIz
// デコード
byte[]b = Base64.getMimeDecoder().decode(a);
String de1 = new String(b,charset);
System.out.println("de1= " + de1);
// de1= abcあいう123
}
}
14行目のencodeメソッドの引数はバイト配列です。
20行目のdecodeメソッドの引数はバイト配列です。
15,16,21,22行目はバイト配列を復号化して文字列を表示しています。
以下はバイト配列の作成と復号のリンクです。
Java バイト配列の作成と復号のサンプル
RFC4648の表1のBase64アルファベット
RFC4648の表1のBase64アルファベットです。この下にあるRFC2045の表1と同じです。
https://tools.ietf.org/html/rfc4648
Table 1: The Base 64 Alphabet
Value Encoding Value Encoding Value Encoding Value Encoding
0 A 17 R 34 i 51 z
1 B 18 S 35 j 52 0
2 C 19 T 36 k 53 1
3 D 20 U 37 l 54 2
4 E 21 V 38 m 55 3
5 F 22 W 39 n 56 4
6 G 23 X 40 o 57 5
7 H 24 Y 41 p 58 6
8 I 25 Z 42 q 59 7
9 J 26 a 43 r 60 8
10 K 27 b 44 s 61 9
11 L 28 c 45 t 62 +
12 M 29 d 46 u 63 /
13 N 30 e 47 v
14 O 31 f 48 w (pad) =
15 P 32 g 49 x
16 Q 33 h 50 y
RFC2045の表1のBase64アルファベット
RFC2045の表1のBase64アルファベットです。この上にあるRFC4648の表1と同じです。
https://www.ietf.org/rfc/rfc2045.txt
Table 1: The Base64 Alphabet
Value Encoding Value Encoding Value Encoding Value Encoding
0 A 17 R 34 i 51 z
1 B 18 S 35 j 52 0
2 C 19 T 36 k 53 1
3 D 20 U 37 l 54 2
4 E 21 V 38 m 55 3
5 F 22 W 39 n 56 4
6 G 23 X 40 o 57 5
7 H 24 Y 41 p 58 6
8 I 25 Z 42 q 59 7
9 J 26 a 43 r 60 8
10 K 27 b 44 s 61 9
11 L 28 c 45 t 62 +
12 M 29 d 46 u 63 /
13 N 30 e 47 v
14 O 31 f 48 w (pad) =
15 P 32 g 49 x
16 Q 33 h 50 y
RFC4648の表2のBase64アルファベット
RFC4648の表2のBase64アルファベットです。
上記2つの表との違いは,62と63です。プラス(+)とスラッシュ(/)がマイナス(-)とアンダーライン(_)になっています。
https://tools.ietf.org/html/rfc4648
Table 2: The "URL and Filename safe" Base 64 Alphabet
Value Encoding Value Encoding Value Encoding Value Encoding
0 A 17 R 34 i 51 z
1 B 18 S 35 j 52 0
2 C 19 T 36 k 53 1
3 D 20 U 37 l 54 2
4 E 21 V 38 m 55 3
5 F 22 W 39 n 56 4
6 G 23 X 40 o 57 5
7 H 24 Y 41 p 58 6
8 I 25 Z 42 q 59 7
9 J 26 a 43 r 60 8
10 K 27 b 44 s 61 9
11 L 28 c 45 t 62 - (minus)
12 M 29 d 46 u 63 _
13 N 30 e 47 v (underline)
14 O 31 f 48 w
15 P 32 g 49 x
16 Q 33 h 50 y (pad) =
関連の記事