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

[Ruby][備忘録]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=

http://hogehoge.tk/tool/:title

  • プレーンTEXT, 変換不要, 未指定, BASE64
a2tfQXRha2E=

http://tociyuki.flop.jp/archive/base64.html:title

a2tfQXRha2E=

http://base64.taroz.jp/:title

a2tfQXRha2E=

おお、同じようだ。

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

関連記事(この記事の初版より古い記事はリンクがグレーで表示されます)

  1. 2012/12/25 [Ruby] メモ化を知った
  2. 2012/11/12 [Ruby] [Jekyll] はてなダイアリーのエントリをJekyllへ移行する
  3. 2012/10/10 [Jekyll] [Liquid] [Ruby] Jekyll(Liquid)で記事の目次を出力するプラグインを作ってみた
  4. 2012/10/01 [Ruby] [Bundle] [Windows] bundle execを省略したいのでバッチを作った(Windows版)
  5. 2012/09/21 [Python] [Ruby] [Jekyll] Pygmentsを使ってJekyll内記事のコードハイライトを実現する
  6. 2012/09/20 [Jekyll] [StartUp] [Ruby] JekyllをGitHub Pagesに上げるための準備
  7. 2012/09/14 [Ruby] [StartUp] [Jekyll] JekyllとJekyll Bootstrapでかんたん静的サイト生成…するための準備
  8. 2012/09/13 [Ruby] [Fluentd] Fluentdの自作プラグインがロードできないのでソースの中身を追ってみる…
  9. 2012/08/17 [Fluentd] [Ruby] Fluentdのプラグインを作成してみる(練習用)
  10. 2012/07/17 [Ruby] [Windows] [Redmine] Windows版Redmineをサービスに登録してブート時に起動させる(宿題あり)
  11. 2012/07/12 [Fluentd] [Ruby] Fluentdというログ収集ツールを使ってApacheのログを取得するまで
  12. 2012/06/03 [TDD] [RSpec] [Ruby] [イベント] TDD Boot Camp 大阪 1.0( #tddbc ) に参加しました
  13. 2012/05/28 [Ruby] [イベント] [Jenkins] [Redmine] Jenkins,Redmine使いこなし勉強会に参加しました と、ちょっとプラグイン作ってみた #jen_red
  14. 2012/05/21 [SlideShare] [Heroku] [Ruby] [API] SlideShareのAPIを叩いてスライドをDLするRubyスクリプトをHerokuにデプロイした
  15. 2012/04/20 [Ruby] [Windows] ZenTestで実行したRSpecの結果をGrowlで通知してくれるようにした