Я хочу базувати дані base64, щоб розмістити їх у URL-адресі, а потім розшифрувати їх у своєму HttpHandler.
Я виявив, що кодування Base64 дозволяє використовувати символ "/", який зіпсує мою відповідність 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('/', '_');
Я бачив " Посібник по Base64" для запису URL StackOverflow, але він має відому довжину, і тому вони можуть жорстко кодувати кількість рівних знаків, необхідних в кінці.