Я хочу закодировать данные в base64, чтобы поместить их в URL, а затем декодировать в моем HttpHandler.
Я обнаружил, что Base64 Encoding позволяет использовать символ '/', который может испортить совпадение с моим UriTemplate. Затем я обнаружил, что существует понятие «модифицированный Base64 для URL» из Википедии:
Существует модифицированный вариант Base64 для URL, в котором не будет использоваться отступ '=', а символы '+' и '/' в стандартном Base64 соответственно заменены на '-' и '_', так что при использовании URL кодировщики / декодеры больше не нужны и не влияют на длину кодированного значения, оставляя ту же самую кодированную форму без изменений для использования в реляционных базах данных, веб-формах и идентификаторах объектов в целом.
Использование .NET Я хочу изменить свой текущий код от базового кодирования и декодирования base64 до использования метода «модифицированного base64 для URL». Кто-нибудь делал это?
Чтобы декодировать, я знаю, что это начинается с чего-то вроде:
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('/', '_');
Я видел запись Guid to Base64 для URL StackOverflow, но она имеет известную длину, и поэтому они могут жестко задавать количество знаков равенства, необходимых в конце.