1. ホーム
  2. c#

[解決済み] C#でBase64 URLセーフエンコーディングを実現するには?

2022-05-15 11:35:40

質問

C#でBase64のURLセーフエンコーディングを実現したい。Javaでは、一般的な Codec ライブラリがあり、URLセーフエンコードされた文字列を得ることができます。C#を使用して同じことを実現するにはどうすればよいですか?

byte[] toEncodeAsBytes = System.Text.ASCIIEncoding.ASCII.GetBytes("StringToEncode");
string returnValue = System.Convert.ToBase64String(toEncodeAsBytes);

上記のコードではBase64に変換されますが、パッドで == . URLセーフエンコーディングを実現する方法はありますか?

どのように解決するのですか?

よくあるのが 単純にアルファベットを入れ替える で、%-エンコーディングは必要ありません。 + , /= 最も一般的な置換は - の代わりに +_ の代わりに / . パディングについては を削除してください。 (その = ); を削除することができます。 を推測する を推測することができます。もう一方の端:プロセスを逆にするだけです。

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);

しかし、興味深いのは、この問題です。 は、quot;common codec library" が使用しているのと同じアプローチなのでしょうか? 確かに、最初にテストするのは妥当でしょう。これはかなり一般的なアプローチです。