簡単な方法では、Base64 エンコーディングを使用して値をエンコードします。これは、16 進エンコーディング (Base16) に非常に似ていますが、より長い辞書を使用します。
Base64 文字列は、適切に準備された場合、印刷可能な文字のみを含みます。これは、コピー/貼り付けと共有の利点です。
2 つ目の利点は、エンコード率が 3:4 であることです。これは、適度に効率的であることを意味します。3:4 のエンコード比は、入力の 3 バイトごとに、エンコードに 4 バイトが使用されることを意味します (75% 効率)。16 進エンコーディングは効率の低い 1:2 エンコーディング比です。つまり、入力の 1 バイトごとに 2 バイトを使用してエンコードします (50% 効率)。
Ruby 標準ライブラリのBase64実装を使用して、次のようにエンコードおよびデコードできます。
require "base64"
encoded = Base64.encode64("Taste the thunder!") # <== "VGFzdGUgdGhlIHRodW5kZXIh\n"
decoded = Base64.decode64(encoded) # <== "Taste the thunder!"
(ほとんど) URL セーフ バージョンもあることに注意してください。これにより、追加の URL エンコードを必要とせずに、エンコードされた値を URL のどこにでも含めることができます。これにより、URL 内の情報を不明瞭な方法で渡すことができます。特に、通常はその方法では簡単に渡されない情報を渡すことができます。
これを試してデータをエンコードしてください:
encoded_url_param = Base64.urlsafe_encode64("cake+pie=yummy!") # <== "Y2FrZStwaWU9eXVtbXkh"
decoded_url_param = Base64.urlsafe_decode64(encoded_url_param) # <== "cake+pie=yummy!"
URL で Base64 を使用することは、実際には「セキュリティ」ではありませんが、データと意図から目を離さないようにするのに役立ちます。URL で Base64 値を使用することの唯一の潜在的な欠点は、URL で大文字と小文字を区別する必要があり、一部のアプリケーションではその要件が守られないことです。詳細については、URL は大文字と小文字を区別する必要があるSO の質問を参照してください。