Saya ingin menyandikan data base64 untuk memasukkannya ke dalam URL dan kemudian mendekodekannya dalam HttpHandler saya.
Saya telah menemukan bahwa Pengkodean Base64 memungkinkan karakter '/' yang akan mengacaukan pencocokan UriTemplate saya. Kemudian saya menemukan bahwa ada konsep "Base64 yang dimodifikasi untuk URL" dari wikipedia:
Ada Base64 yang dimodifikasi untuk varian URL, di mana tidak ada padding '=' yang akan digunakan, dan karakter '+' dan '/' dari Base64 standar masing-masing diganti dengan '-' dan '_', sehingga menggunakan encoders / decoder URL tidak lagi diperlukan dan tidak berdampak pada panjang nilai yang dikodekan, membiarkan bentuk enkode yang sama tetap utuh untuk digunakan dalam database relasional, formulir web, dan pengidentifikasi objek secara umum.
Menggunakan .NET Saya ingin mengubah kode saya saat ini dari melakukan pengkodean dan penguraian base64 dasar menjadi menggunakan metode "base64 yang dimodifikasi untuk URL". Apakah ada yang melakukan ini?
Untuk memecahkan kode, saya tahu itu dimulai dengan sesuatu seperti:
string base64EncodedText = base64UrlEncodedText.Replace('-', '+').Replace('_', '/');
// Append '=' char(s) if necessary - how best to do this?
// My normal base64 decoding now uses encodedText
Tapi, saya perlu menambahkan satu atau dua karakter '=' ke bagian akhir yang terlihat sedikit lebih kompleks.
Logika pengkodean saya seharusnya sedikit lebih sederhana:
// 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('/', '_');
Saya telah melihat Panduan ke Base64 untuk entri URL StackOverflow, tetapi itu memiliki panjang yang diketahui dan oleh karena itu mereka dapat melakukan hardcode jumlah tanda yang sama yang dibutuhkan di bagian akhir.