Tôi muốn mã hóa dữ liệu base64 để đưa nó vào một URL và sau đó giải mã nó trong HttpHandler của tôi.
Tôi nhận thấy rằng Mã hóa Base64 cho phép ký tự '/' sẽ làm xáo trộn kết hợp UriTemplate của tôi. Sau đó, tôi thấy rằng có một khái niệm về "Base64 được sửa đổi cho URL" từ wikipedia:
Có một biến thể Base64 được sửa đổi cho URL tồn tại, nơi không sử dụng padding '=' và các ký tự '+' và '/' của Base64 chuẩn được thay thế tương ứng bằng '-' và '_', để sử dụng bộ mã hóa / giải mã URL không còn cần thiết và không ảnh hưởng đến độ dài của giá trị được mã hóa, giữ nguyên dạng được mã hóa tương tự để sử dụng trong cơ sở dữ liệu quan hệ, biểu mẫu web và mã định danh đối tượng nói chung.
Sử dụng .NET, tôi muốn sửa đổi mã hiện tại của mình từ thực hiện mã hóa và giải mã base64 cơ bản sang sử dụng phương pháp "base64 được sửa đổi cho URL". Có ai đã làm điều này?
Để giải mã, tôi biết nó bắt đầu với một cái gì đó như:
string base64EncodedText = base64UrlEncodedText.Replace('-', '+').Replace('_', '/');
// Append '=' char(s) if necessary - how best to do this?
// My normal base64 decoding now uses encodedText
Tuy nhiên, tôi có thể cần thêm một hoặc hai ký tự '=' vào cuối, trông phức tạp hơn một chút.
Logic mã hóa của tôi nên đơn giản hơn một chút:
// 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('/', '_');
Tôi đã xem Hướng dẫn Base64 cho mục nhập URL StackOverflow, nhưng điều đó có độ dài đã biết và do đó chúng có thể mã hóa số lượng dấu bằng cần thiết ở cuối.