Tôi muốn dữ liệu mã hóa base64 để đặt nó vào một URL và sau đó giải mã nó trong HttpHandler của tôi.Mã để giải mã/mã hóa URL base64 đã sửa đổi
Tôi đã tìm thấy rằng Base64 Encoding cho phép ký tự '/' sẽ làm hỏng 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 sửa đổi cho URL" từ wikipedia:
Biến thể Base64 cho biến thể URL tồn tại, nơi không có padding '=' sẽ được sử dụng, và '+' và '/' các ký tự của chuẩn Base64 được thay thế bằng '-' và '_', để sử dụng bộ giải mã/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, để nguyên dạng mã hóa tương tự để sử dụng trong cơ sở dữ liệu quan hệ , biểu mẫu web và số nhận dạng đố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 bằng cách mã hóa và giải mã base64 cơ bản để sử dụng phương pháp "base64 cho URL" đã sửa đổi. Có ai đã làm điều này không?
Để giải mã, tôi biết nó bắt đầu với 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
Nhưng, tôi cần phải có khả năng 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.
lý 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 đã thấy các StackOverflow nhập Guid to Base64 for URL, nhưng điều đó có chiều dài biết và vì vậy họ có thể hardcode số dấu bằng cần thiết ở cuối.
@Kirk: Điều chỉnh câu trả lời của tôi bằng toán được kiểm tra. – AnthonyWJones