技術とか戦略とか

IT技術者が技術や戦略について書くブログです。

Base64の説明とjavaでのエンコード・デコードの例

Base64とは、テキストデータやバイナリデータ(画像ファイル、PDFファイル等)を表現する方式の一つです。
以下の64種類の文字と末尾のパディング文字(=)を用いて表現するのが特徴です。
・アルファベット(a~z, A~Z)
・数字(0~9)
・一部の記号(+, /)
 
この表現方式は、一部の文字しか使用できないプロトコルでデータの送受信を行いたい場合に有用であり、ASCII文字しか送受信できないプロトコルでもデータの送受信が可能になります。
有名な所で言うと、電子メール(SMTP)でBase64が使われています。
また、APIでのデータ送受信でも良く使われます。
 
ここで、Base64エンコード・デコードをイメージしやすくするため、2バイト文字(日本語)を Java8 の java.util.Base64https://docs.oracle.com/javase/jp/8/docs/api/java/util/Base64.html)を用いてエンコード・デコードしてみます。
 
【サンプルコード】
・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エンコード・デコードの方式は公開されており、人気の言語ではライブラリも存在しているので、他の言語でも実装可能です。