2018年以降の記事はGitHub Pagesに移行しました

BASE64エンコーディングをRubyで自力実装した

あらすじ

BASE64エンコーディングをおまじないのように使っていたので車輪の再発明で原理を学ぶ。

BASE64

Base64は、データを64種類の印字可能な英数字のみを用いて、それ以外の文字を扱うことの出来ない通信環境にてマルチバイト文字やバイナリデータを扱うためのエンコード方式である。

http://ja.wikipedia.org/wiki/Base64
  • データ変換形式
  • メール等でも使われている
  • やりかた
    • 元データを6bitに分割
      • ちょうど6bitにならない場合は0を足す
    • 6bitデータを対応する文字に4文字ずつ変換(A-Za-z0-9+/)
      • 4文字にならない場合は=を足す
    • 全部くっつける

ふむう。。何か書けそう? ちょっとやってみるか。

ソース

  1. まず、変換したい文字のASCII値を取得
  2. 次にそれを2進数に変換(1と2はまとめてもいいかも)
  3. 6bit毎に分けて割り切れない分は0を足す
  4. 6bitのデータを変換テーブルと照らしあわせて対応する1文字と変換
  5. 4文字になるまで=を足す

検証

  • テスト文字列: kk_Ataka
$ ruby base64.rb kk_Ataka
BYTE16:6b6b5f4174616b61
BYTE2 :0110101101101011010111110100000101110100011000010110101101100001
ADD 0 :011010110110101101011111010000010111010001100001011010110110000100
TRANS :a2tfQXRha2E
ADD = :a2tfQXRha2E=
a2tfQXRha2E=
base64エンコード・デコード
a2tfQXRha2E=

おお、同じようだ。

とりあえず原理は何となくわかったぞ。