Java Base64のエンコードとデコードのサンプル

JavaのBase64のエンコードとデコードのサンプルです。
Java標準のBase64クラスを使用します。

確認環境
・Java 8

目次

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) =

関連の記事

Java バイト配列の作成と復号のサンプル(getBytes)

△上に戻る