1.base64とは
base64とは、64進数を意味する言葉で、すべてのデータをアルファベット(a~z, A~z)と数字(0~9)、一部の記号(+,/)の64文字で表すエンコード方式である。
Eメールを送るためのプロトコルSMTPでは、ASCIIコードの7bitで表現される英数字しか送ることができなかったが、Eメールを使って画像や音声などのデータを扱えるようにするため、すべてのデータを英数字で表すMIME(Multipurpose Internet Mail Extensions)という規格が登場し、その中でbase64というデータの変換方法が定められた。
MIMEは、SMTPに加えて設定されるメッセージ送信標準のひとつで、Eメールに画像、動画、音声などのファイルを添付できる機能。
MIMEタイプにはファイルの種類を表わす形式で、
・text/plain:テキストファイル(中身が文字だけのファイル)
・text/html:HTMLファイル(ホームページのファイル)
・image/png:PNGファイル(PNG形式の画像ファイル)
がある。
メールではContent-Typeの中で「Content-Type: text/plain; charset=iso-2022-jp」
のように指定する。
2.base64の変換
base64への変換は下記の規則で行う。
・エンコードしたいファイルのバイナリデータを6bitずつ取り出す(足りない分は0を追加する)。
・6ビット列をbase64の変換表(下表)で文字(英数字)に変換する。
・4文字ずつに分けて、4文字に満たない場合は=を追加する。
変換したい文字列”ABCD”(ASCIIコード)をbase64に変換する例
(1)変更したい文字列をバイナリ(2進数)に変換する
0x41, 0x42, 0x43, 0x44(16進数)
0100 0001, 0100 0010, 0100 0011, 0100 0100(2進数)
(2)バイナリを6ビットづつに分割する
010000, 010100, 001001, 000011, 010001, 00
(3)最後の2ビットが余るので、6ビットになるように0を追加する
010000, 010100, 001001, 000011, 010001, 000000
(4)base64変換表よりビット列を文字に変換する
Q U J D R A
(5)4文字に分けた時に、2文字分足りないので=を追加する
QUJD RA==
2.base64ライブラリ(C++)
(1)base64ライブラリのダウンロード
https://ja.osdn.net/projects/clxcpp/releases/51423
clx_0.18.2.tar.bz2
(2)ライブラリの解凍
# tar xvfj clx_0.18.2.tar.bz2
clx配下に下記のファイルが展開される
(3)エンコードとデコードのサンプルアプリ作成
ex01.cpp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#include <iostream> #include <string> #include </home/clx/base64.h> using namespace std; int main() { cout << "ABCDのエンコードとレコード\n"; string src = "ABCD"; string code = clx::base64::encode(src); cout << "encode:" << code << std::endl; cout << "decode:" << clx::base64::decode(code) << endl; return 0; } |
(4)サンプルのコンパイルと実行
# g++ -o ex01 ex01.cpp
# ./ex01
The end