LoginSignup
0
1

More than 3 years have passed since last update.

Base64を完璧に理解したい人以外、見ないでください。

Posted at

はじめに

タイトルはちょっとウケ狙いなので、許してください。。
業務中に、Base64でエンコードして、デコードして、といった指示があり、初めて聞いた単語に「?」が浮かんだ。
ここでは、自分が調べた情報を共有して、自分のような0からスタートする人の助けになる記事を書きたいと思って書きました。

Base64とは

base64とは、64進数を意味する言葉です。
すべてのデータをアルファベット(a~z, A~z)と数字(0~9)、一部の記号(+,/)の64文字で表すエンコード方式のこと。
ただ、データ長を揃えるためにパディングとして末尾に記号の=を使用するので、厳密にはbase64は、65文字の英数字から表現されています。

エンコードの流れ

  1. 対象の文字列を 16 進数に変換する

  2. 16 進数に変換した数字をそれぞれ 2 進数に変換する

  3. 6 ビットごとに分割して、足りない部分は 0 で詰める

  4. 変換表にしたがって各 6 ビットをエンコードしていく

  5. 4文字ごとに分割して末尾が余る場合、"=" で詰める

  6. 最後にすべての文字をつなげて完成

※デコードは逆の流れ


ABCDEFG

41 42 43 44 45 46 47

0100 0001, 0100 0010, 0100 0011, 0100 0100, 0100 0101, 0100 0110, 0100 0111

010000 010100 001001 000011 010001 000100 010101 000110 010001 11

010000 010100 001001 000011 010001 000100 010101 000110 010001 110000

QUJDREVGRw

"QUJD", "REVG", "Rw"

"QUJD", "REVG", "Rw=="

QUJDREVGRw==

モジュール関数

decode64

与えられた文字列をBase64デコードしたデータで返します。


require 'base64'

str = 'Tm93IGlzIHRoZSB0aW1lIGZvciBhbGwgZ29vZCBjb2RlcnMKdG8gbGVhcm4gUnVieQ=='
puts Base64.decode64(str)
#=> "Now is the time for all good coders\nto learn Ruby"

encode64

与えられた文字列をBase64エンコードしたデータで返します。


require 'base64'

str = "Now is the time for all good coders\nto learn Ruby"
Base64.encode64(str)
#=> Tm93IGlzIHRoZSB0aW1lIGZvciBhbGwgZ29vZCBjb2RlcnMKdG8gbGVhcm4gUnVieQ==

おまけ

こちらのツールを使えば自動でエンコードした文字列を出力してくれるので、エンコード文字列が欲しい場合はこちらを使うのが便利です。

終わりに

ここまでで、0からの知識の人でもある程度は掴めたのではないでしょうか?
頻繁ではないにしろ、必要な知識ではあると思うので、使えるレベルまで持っていって損は無いです!

参考

Base64のしくみを理解するためにRubyで実装してみる

module Base64

base64でエンコードされた画像をActive Storageで保存する

Rails(Ruby)でBase64化された画像を取り回すときのSnippet

singleton method Tempfile.new

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1