情報提供サイト(その2) ver.2023




Base64について

Base64は、データを64種類の印字可能な英数字のみを用いて表示する手法です。特定の文字コードを扱うことができない通信環境において、日本語などのようなマルチバイト文字やバイナリデータを扱うことを可能にするエンコード方式です。多目的インターネットメール拡張(MIME: Multipurpose Internet Mail Extension)により規定され、当時7ビットデータしか扱うことができなかった電子メールで、8ビット系列の文字コードの送信やバイナリデータの添付を実現しました。

具体的には、A、B、…、Z、a、b、…、z、0、1、…、9の62種類の英数字と、+、/の2種類の記号、およびパディングのための=が使用されます。この変換によって、データ量は4/3倍(133%)に増加します。また、MIME基準では76文字ごとに改行コードが入るため、この分の2バイトを計算に入れるとデータ量は約137%になります。

Base64の変換方法は以下のとおりです。

  1. 元データを6ビットずつに分割する。6ビットに満たない分は後ろに0を追加して6ビットにする。
  2. 各6ビットの値を変換表を使って変換する。
  3. 変換後の文字数が4の倍数になるようにする。足りない場合には「=」を付けてパディングする。

参考サイト

Base64 - Wikipedia




Base64の計算方法について

今回は、以下のサンプルコードとコンパイル方法を参考にして、自分のプログラムにBase64エンコードのための関数を組み込んでください。

base64.c
base64.h
main.c

上の3つのファイルを同じフォルダに保存し、以下のようなコマンドによりコンパイルしてください。


gcc -Wall base64.c main.c -o b64enc

これにより「b64enc」という実行ファイルができます。試しに実行してみましょう。


./b64enc

「Input string ->」と出てきたら、試しに好きな文字列を入力してみましょう。


Input string -> Takumi Miyoshi
VGFrdW1pIE1peW9zaGkK
VGFrdW1pIE1peW9zaGkK
Input string ->

main.cを見れば分かりますが、キーボード入力をfgets()で受け取っていますので、スペースが入ってもまとめて文字列に格納されます。また,base64Encode()を2回実行し、MIME用Base64エンコードとURL用Base64エンコードの結果が表示されています。 なお、今回の課題ではMIME用Base64エンコードを使用してください。



Copyright (c) 2023 MINET/EIS/SES/SIT, All rights reserved.