はじめに
タイトルはちょっとウケ狙いなので、許してください。。
業務中に、Base64でエンコードして、デコードして、といった指示があり、初めて聞いた単語に「?」が浮かんだ。
ここでは、自分が調べた情報を共有して、自分のような0からスタートする人の助けになる記事を書きたいと思って書きました。
Base64とは
base64とは、64進数を意味する言葉です。
すべてのデータをアルファベット(a~z, A~z)と数字(0~9)、一部の記号(+,/)の64文字で表すエンコード方式のこと。
ただ、データ長を揃えるためにパディングとして末尾に記号の=を使用するので、厳密にはbase64は、65文字の英数字から表現されています。
エンコードの流れ
対象の文字列を 16 進数に変換する
16 進数に変換した数字をそれぞれ 2 進数に変換する
6 ビットごとに分割して、足りない部分は 0 で詰める
変換表にしたがって各 6 ビットをエンコードしていく
4文字ごとに分割して末尾が余る場合、"=" で詰める
最後にすべての文字をつなげて完成
※デコードは逆の流れ
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でエンコードされた画像をActive Storageで保存する