using System; using System.Text; namespace Infrastructure.Extensions { public static class Base64Extensions { public static string Base64UrlEncode(this string input) { if (input is null) { throw new ArgumentNullException(nameof(input)); } var output = Convert.ToBase64String(Encoding.UTF8.GetBytes(input)); output = output.Split('=')[0]; output = output.Replace('+', '-'); output = output.Replace('/', '_'); return output; } public static string Base64UrlDecode(this string input) { if (input is null) { throw new ArgumentNullException(nameof(input)); } var output = input; output = output.Replace('-', '+'); output = output.Replace('_', '/'); switch (output.Length % 4) { case 0: break; case 2: output += "=="; break; case 3: output += "="; break; default: break; } var converted = Convert.FromBase64String(output); return Encoding.UTF8.GetString(converted); } } }