C#: base64url согласно RFC4648


Я ищу (быструю) стандартную реализацию для base64url в соответствии с RFC4648 В C#.

Я нашел HttpServerUtility.UrlTokenEncode но похоже, что это не следует за RFC4648 (UrlTokenEncode добавляет число в конце, которое указывает на количество знаков =, которые были удалены; см. здесь и здесь).

Пример:

Кодировка Base64:

Преобразование.ToBase64String (System.Текст.Кодирование.ФОРМАТ ASCII.GetBytes("AA")); / / возвращает "QUE="

Кодировка Base64url:

HttpServerUtility.UrlTokenEncode (System.Текст.Кодирование.ФОРМАТ ASCII.GetBytes ("AA")); //возвращает "QUE1", но я ожидал бы "QUE"

1 6

1 ответ:

Судя по комментариям, похоже, что HttpServerUtility.UrlTokenEncode делает правильную вещь , за исключением для дополнительного символа для заполнения. Поэтому вы должны уметь делать:

string customBase64 = HttpServerUtility.UrlTokenEncode(data);
string rfc4648 = customBase64.Substring(0, customBase64.Length - 1);
Тем не менее, вы должны добавить модульные тесты, чтобы проверить, что он действительно использует алфавит RFC 4648 (и таким же образом, как RFC 4648). Это несколько удивительно, что документы настолько редки : (