Код для декодирования / кодирования модифицированного URL base64

Я хочу, чтобы base64 кодировал данные, чтобы поместить их в URL, а затем декодировать их в моем HttpHandler.

Я обнаружил, чтоBase64 кодирование позволяет для "/"; персонаж, который испортит мое соответствие UriTemplate. Затем я обнаружил, что существует концепция «модифицированного Base64 для URL». из википедии:

Существует модифицированный вариант Base64 для URL, где нет отступов "=" будет использоваться, и "+"; и "/"; символы стандартного Base64 соответственно заменены на «-»; и '_', так что использование кодировщиков / декодеров URL больше не требуется и не влияет на длину кодированного значения, оставляя ту же самую кодированную форму без изменений для использования в реляционных базах данных, веб-формах и идентификаторах объектов в целом.

Используя .NET, я хочу изменить свой текущий код от базового кодирования и декодирования base64 до использования & quot; модифицированного base64 для URL & quot; метод. Кто-нибудь делал это?

Для декодирования, я знаю, это начинается с чего-то вроде:

string base64EncodedText = base64UrlEncodedText.Replace('-', '+').Replace('_', '/');

// Append '=' char(s) if necessary - how best to do this?

// My normal base64 decoding now uses encodedText

Но мне нужно потенциально добавить один или два символа "=" символы до конца, который выглядит немного сложнее.

Моя логика кодирования должна быть немного проще:

// Perform normal base64 encoding
byte[] encodedBytes = Encoding.UTF8.GetBytes(unencodedText);
string base64EncodedText = Convert.ToBase64String(encodedBytes);

// Apply URL variant
string base64UrlEncodedText = base64EncodedText.Replace("=", String.Empty).Replace('+', '-').Replace('/', '_');

Я виделРуководство для Base64 для URL Запись StackOverflow, но она имеет известную длину, и поэтому они могут жестко задавать количество знаков равенства, необходимых в конце.

Ответы на вопрос(5)

Ваш ответ на вопрос