Base64とは、テキストデータやバイナリデータ(画像ファイル、PDFファイル等)を表現する方式の一つです。
以下の64種類の文字と末尾のパディング文字(=)を用いて表現するのが特徴です。
・アルファベット(a~z, A~Z)
・数字(0~9)
・一部の記号(+, /)
この表現方式は、一部の文字しか使用できないプロトコルでデータの送受信を行いたい場合に有用であり、ASCII文字しか送受信できないプロトコルでもデータの送受信が可能になります。
有名な所で言うと、電子メール(SMTP)でBase64が使われています。
また、APIでのデータ送受信でも良く使われます。
ここで、Base64のエンコード・デコードをイメージしやすくするため、2バイト文字(日本語)をJava8 の java.util.Base64を用いてエンコード・デコードしてみます。
【サンプルコード】
・Base64Test.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
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); } } |
【実行結果】
1 2 3 |
元の文字列 : こんにちは! Base64へのエンコード : 44GT44KT44Gr44Gh44Gv77yB Base64からのデコード : こんにちは! |
なお、今回の記事では触れませんが、バイナリファイルを1バイトずつエンコード・デコードすることで、バイナリデータにも対応できます。
また、Base64のエンコード・デコードの方式は公開されており、人気の言語ではライブラリも存在しているので、他の言語でも実装可能です。
いかがでしたでしょうか。
Base64については入門書で触れられることが少なく、情報処理技術者試験でも午前問題で稀に出題される程度なので、実務で初めて耳にする方は少なくないと思います。
「Base64を使えば画像や動画もASCII文字(1バイト文字)で表現できる」というざっくりな知識だけでも覚えておけば、実務でもスムーズにコミュニケーションできるかと思います。
コメント