Base64はA–Z
, a–z
, 0–9
, +
, /
の64文字を使って文字列をエンコードする方式で、+
と/
がURLパラメータとして使うにはふさわしくないので、それを-
と_
に置き換えたものをBase64URLエンコーディングと言います。
参考:http://ja.wikipedia.org/wiki/Base64
この方式でエンコード/デコードするには、Base64クラスのurlsafe_encode64
とurlsafe_decode64
を使えば出来ます。
encode_decode.rb
require "base64"
basic_enc = Base64.encode64('ab?cd~') # => "YWI/Y2R+ZQ==\n"
original = Base64.decode64(basic_enc) # => "ab?cd~e"
urlsafe_enc = Base64.urlsafe_encode64('ab?cd~') # => "YWI_Y2R-ZQ=="
original = Base64.urlsafe_decode64(urlsafe_enc) # => "ab?cd~e"
おまけ:パディングの'='をなくして、少し短くする
base64エンコードは4文字区切りなので、エンコード結果が4の倍数にならなかったときはパディングと言って'='が入ります。
これは別に削除してしまってもデコード時に4の倍数になるように'='を追加してあげられるので
base64.rb
module Base64
def self.short_urlsafe_encode64(str)
urlsafe_encode64(str).delete('=')
end
def self.short_urlsafe_decode64(str)
urlsafe_decode64(str + '=' * (-1 * str.size & 3))
end
end
encode_decode.rb
enc = Base64.short_urlsafe_encode64('ab?bc~e') # => "YWI_YmN-ZQ"
original = Base64.short_urlsafe_decode64(enc) # => "ab?cd~e"
のような関数を作り、使うことができます。