Удивительно, но в настоящее время принятый ответ не совсем верен.
Как и в некоторых других ответах, это называется кодировкой base64url и является частью RFC7515 .
По сути, они заменили символы '+' и '/' на '-' и '_' соответственно; и дополнительно удалил все завершающие символы '=', потому что вы всегда можете определить количество пропущенных символов, просто взглянув на длину закодированной строки.
Вот иллюстративный пример из RFC7515 в C #:
static string base64urlencode(byte [] arg)
{
string s = Convert.ToBase64String(arg); // Regular base64 encoder
s = s.Split('=')[0]; // Remove any trailing '='s
s = s.Replace('+', '-'); // 62nd char of encoding
s = s.Replace('/', '_'); // 63rd char of encoding
return s;
}
static byte [] base64urldecode(string arg)
{
string s = arg;
s = s.Replace('-', '+'); // 62nd char of encoding
s = s.Replace('_', '/'); // 63rd char of encoding
switch (s.Length % 4) // Pad with trailing '='s
{
case 0: break; // No pad chars in this case
case 2: s += "=="; break; // Two pad chars
case 3: s += "="; break; // One pad char
default: throw new System.Exception(
"Illegal base64url string!");
}
return Convert.FromBase64String(s); // Standard base64 decoder
}