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