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.
Jawaban:
Ini harus menjelaskannya dengan benar: -
sumber
Periksa juga kelas HttpServerUtility dengan metode UrlTokenEncode dan UrlTokenDecode yang menangani pengodean dan dekode Base64 URL yang aman.
Catatan 1: Hasilnya bukan string Base64 yang valid. Beberapa karakter yang tidak aman untuk URL diganti.
Catatan 2: Hasil berbeda dari algoritma base64url di RFC4648.
sumber
UrlTokenEncode
ini tidak hanya base64url , karena menggantikan '=' padding dengan '0', '1' atau '2' tergantung pada berapa banyak tanda yang sama yang diganti.Tidak cukup poin untuk dikomentari, tetapi jika itu membantu, cuplikan kode yang ditemukan Sushil di tautan yang disediakan (draf ietf Tanda Tangan Web JSON) berfungsi saat mengenkode Base 64 sebagai parameter di URL.
Cuplikan yang disalin di bawah untuk mereka yang malas:
sumber
Saya menekan di sini sambil mencari kode untuk melakukan encode / decode untuk pengkodean base64url yang sedikit berbeda dari base64 seperti yang dijelaskan dalam pertanyaan.
Ditemukan c # cuplikan kode dalam dokumen ini. Draf ietf Tanda Tangan Web JSON
sumber
Dibandingkan dengan jawaban yang diterima, berikut adalah cara Anda mendekode url yang dikodekan base64, menggunakan C #:
Membaca sandi:
sumber