Base64の説明とJavaでのエンコード・デコード方法

java

Base64とは、テキストデータやバイナリデータ(画像ファイル、PDFファイル等)を表現する方式の一つです。
以下の64種類の文字と末尾のパディング文字(=)を用いて表現するのが特徴です。
・アルファベット(a~z, A~Z)
・数字(0~9)
・一部の記号(+, /)

この表現方式は、一部の文字しか使用できないプロトコルでデータの送受信を行いたい場合に有用であり、ASCII文字しか送受信できないプロトコルでもデータの送受信が可能になります。
有名な所で言うと、電子メール(SMTP)でBase64が使われています。
また、APIでのデータ送受信でも良く使われます。

ここで、Base64のエンコード・デコードをイメージしやすくするため、2バイト文字(日本語)をJava8 の java.util.Base64を用いてエンコード・デコードしてみます。

【サンプルコード】

・Base64Test.java

import java.util.Base64;

public class Base64Test {

    public static void main(String[] args) {

        // 元の文字列(2バイト文字)
        final String orgStr = "こんにちは!";

        // Base64へのエンコード
        String encodedStr =
            Base64.getEncoder().encodeToString(orgStr.getBytes());

        // Base64からのデコード
        String decodedStr =
            new String(Base64.getDecoder().decode(encodedStr));

        System.out.println("元の文字列      : " + orgStr);
        System.out.println("Base64へのエンコード : " + encodedStr);
        System.out.println("Base64からのデコード : " + decodedStr);

    }

}

【実行結果】

元の文字列      : こんにちは!
Base64へのエンコード : 44GT44KT44Gr44Gh44Gv77yB
Base64からのデコード : こんにちは!

なお、今回の記事では触れませんが、バイナリファイルを1バイトずつエンコード・デコードすることで、バイナリデータにも対応できます。
また、Base64のエンコード・デコードの方式は公開されており、人気の言語ではライブラリも存在しているので、他の言語でも実装可能です。


いかがでしたでしょうか。

Base64については入門書で触れられることが少なく、情報処理技術者試験でも午前問題で稀に出題される程度なので、実務で初めて耳にする方は少なくないと思います。
「Base64を使えば画像や動画もASCII文字(1バイト文字)で表現できる」というざっくりな知識だけでも覚えておけば、実務でもスムーズにコミュニケーションできるかと思います。

コメント

タイトルとURLをコピーしました