C# で Base64 URL セーフ エンコーディングを実現したいと考えています。Java には、URL セーフ エンコードされた文字列を提供する共通Codec
ライブラリがあります。C# を使用して同じことを実現するにはどうすればよいでしょうか。
byte[] toEncodeAsBytes = System.Text.ASCIIEncoding.ASCII.GetBytes("StringToEncode");
string returnValue = System.Convert.ToBase64String(toEncodeAsBytes);
上記のコードは Base64 に変換しますが、パディングを行います==
。URL セーフ エンコーディングを実現する方法はありますか?
ベストアンサー1
よくあるのはアルファベットを入れ替えるだけURL で使用する場合は % エンコードは不要です。65 文字のうち、問題となるのは 、 、 の 3 文字だけです+
。/
最も=
一般的な置換は-
の代わりに+
、_
の代わりにです/
。パディングについては、次のようになります。削除するだけです(=
);あなたは推測する必要なパディングの量。反対側では、プロセスを逆にするだけです。
string returnValue = System.Convert.ToBase64String(toEncodeAsBytes)
.TrimEnd(padding).Replace('+', '-').Replace('/', '_');
と:
static readonly char[] padding = { '=' };
逆にすると:
string incoming = returnValue
.Replace('_', '/').Replace('-', '+');
switch(returnValue.Length % 4) {
case 2: incoming += "=="; break;
case 3: incoming += "="; break;
}
byte[] bytes = Convert.FromBase64String(incoming);
string originalText = Encoding.ASCII.GetString(bytes);
しかし、興味深い疑問は次の通りです。これは「共通コーデックライブラリ」が使用するアプローチと同じですか?これは確かに最初にテストするのに適した方法であり、かなり一般的なアプローチです。