.NETでBase64とBase64 URLを相互変換(エンコード・デコード)したい!
概要
今回の記事では、.NETでBase64とBase64 URLを相互変換(エンコード・デコード)する手順を掲載する。
Base64は、バイナリなどのデータを64種類の文字列で表現するエンコード方式です。
Base64 URLは、Base64から更にURLとして使える文字列で表現するエンコード方式です。具体的にはBase64にエンコードした文字列に下記の処理を行う。
+を-に置換する/を_に置換する- 末尾の
=を削除する
仕様書
環境
- NET6.0
手順書
下記は、文字列をBase64にエンコードした後にBase64 URLにエンコードした文字列を返す関数です。
public string ToBase64UrlString(string s)
{
return Convert.ToBase64String(Encoding.UTF8.GetBytes(s))
.TrimEnd('=')
.Replace('+', '-')
.Replace('/', '_');
}
下記は、Base64 URLにエンコードされた文字列をBase64にデコードした後に元の文字列にデコードした文字列を返す関数です。
public string FromBase64UrlString(string s)
{
for (int i = 0; i < (s.Length % 4); i++)
{
s += "=";
}
return Encoding.UTF8.GetString(
Convert.FromBase64String(
s.Replace('-', '+').Replace('_', '/')
)
);
}
Base64は、文字列の長さを4の倍数にする必要がある。下記のコードの部分で文字列の長さが4の倍数になってるか判定して4の倍数になってなければ、文字列の末尾に=を挿入して文字列の長さを調整してる。
for (int i = 0; i < (s.Length % 4); i++)
{
s += "=";
}
まとめ(感想文)
Base64でエンコードした文字列をそのままURLに使ってしまって、沼に沈みかけたのは良い思い出…。
