Base64 エンコードとデコード

Beginner

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、java.util.Base64 クラスと Apache Commons ライブラリを使用して Java で Base64 データをエンコードおよびデコードする方法を学びます。


Skills Graph

新しい Java ファイルを作成する

このステップでは、新しい Java ファイルを作成します。ターミナルを開き、次のコマンドを実行して新しい Java ファイルを作成します。

touch ~/project/Base64Encoding.java

このコマンドにより、~/project ディレクトリ内に Base64Encoding.java という名前の新しいファイルが作成されます。好きな名前を使っても構いませんが、.java で終わることを確認してください。

基本的なエンコードとデコード

このステップでは、基本的なエンコードとデコードについて学びます。

  • 基本的なエンコーダは、エンコードおよびデコードに Base64 アルファベット を使用します。
  • エンコードされた文字列には、改行区切り文字は追加されません。
  • 返されるシンプルな 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(); // 文字列をバイト配列に変換する
        // エンコード
        String encodedStr = Base64.getEncoder().encodeToString(bytesToEncode);
        System.out.println("エンコードされた文字列: " + encodedStr);
        // デコード
        byte[] decodedByteArr = Base64.getDecoder().decode(encodedStr);
        String decodedStr = new String(decodedByteArr);
        System.out.println("デコードされた文字列: " + 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(); // 文字列をバイト配列に変換する
        // パディングなしでエンコード
        String encodedStr = Base64.getEncoder().withoutPadding().encodeToString(bytesToEncode);
        System.out.println("エンコードされた文字列: " + encodedStr);
    }
}

コードをコンパイルして実行するには、ターミナルで次のコマンドを実行します。

javac Base64Encoding.java && java Base64Encoding

URL とファイル名用のセーフなエンコードとデコード

このステップでは、URL とファイル名用のセーフなエンコードとデコードについて学びます。

Base64 クラスは、URL とファイル名用のセーフな Base64 アルファベット を使用して URL のエンコードとデコードを行います。

  • URL 用の Base64 エンコーダを取得するには、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";

        // エンコード
        String encodedUrl = Base64.getUrlEncoder().encodeToString(urlToEncode.getBytes());
        System.out.println("エンコードされた URL: " + encodedUrl);

        // デコード
        byte[] decodedUrlBytes = Base64.getUrlDecoder().decode(encodedUrl);
        String decodedUrl = new String(decodedUrlBytes);
        System.out.print("デコードされた URL: " + decodedUrl);
    }
}

コードをコンパイルして実行するには、ターミナルで次のコマンドを実行します。

javac Base64Encoding.java && java Base64Encoding

MIME エンコードとデコード

このステップでは、MIME エンコードとデコードについて学びます。

  • Base64 クラスは、エンコードおよびデコード操作に Base64 アルファベットを使用します。
  • エンコードされた出力では、各行は最大 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) {
        // エンコード用の MIME 入力を作成する
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 10; ++i) {
            sb.append(UUID.randomUUID().toString());
        }
        // エンコード
        byte[] bytes = sb.toString().getBytes();
        String mimeEncodedStr = Base64.getMimeEncoder().encodeToString(bytes);
        System.out.println("エンコードされた文字列: " + mimeEncodedStr);

        // デコード
        byte[] mimeDecodedBytes = Base64.getMimeDecoder().decode(mimeEncodedStr);
        String mimeDecodedStr = new String(mimeDecodedBytes);
    }
}

コードをコンパイルして実行するには、ターミナルで次のコマンドを実行します。

javac Base64Encoding.java && java Base64Encoding

Apache Commons ライブラリの使用

このステップでは、Apache Commons ライブラリを使って Base64 データをエンコードおよびデコードする方法を学びます。

Apache Commons ライブラリは、org.apache.commons.codec.binary パッケージ内に Base64 クラスを提供しています。

  • このクラスには、異なるエンコード方式用の 5 つの異なるコンストラクタがあります。
  • 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();

        // エンコード
        String strToEncode = "Hello World";
        byte[] encodedBytes = base64.encode(strToEncode.getBytes());
        String encodedStr = new String(encodedBytes);
        System.out.println("エンコードされた文字列: " + encodedStr);

        // デコード
        byte[] decodedByteArr = base64.decode(encodedStr.getBytes());
        String decodedStr = new String(decodedByteArr);
        System.out.println("デコードされた文字列: " + decodedStr);

        // 静的メソッド encodeBase64() と decodeBase64() を使って直接 API にアクセスする
        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、およびファイル名用のセーフ、および MIME の 3 つの異なる Base64 エンコードおよびデコード方式について説明しました。