.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に使ってしまって、沼に沈みかけたのは良い思い出…。