Saya ingin mencapai pengkodean aman URL Base64 di C #. Di Jawa, kami memiliki kesamaanCodec
perpustakaan yang memberi saya string yang dikodekan URL yang aman. Bagaimana saya bisa mencapai hal yang sama menggunakan C #?
byte[] toEncodeAsBytes = System.Text.ASCIIEncoding.ASCII.GetBytes("StringToEncode");
string returnValue = System.Convert.ToBase64String(toEncodeAsBytes);
Kode di atas mengubahnya menjadi Base64, tetapi itu pad ==
. Apakah ada cara untuk mencapai pengkodean aman URL?
Url.Encode
string inBASE64
?System.Web
perakitan.url safe
?%3D
apakah url aman.Jawaban:
Biasanya hanya menukar alfabet untuk digunakan di url, jadi tidak perlu% -encoding; hanya 3 dari 65 karakter yang bermasalah -
+
,/
dan=
. penggantian yang paling umum adalah-
di tempat+
dan_
di tempat/
. Adapun padding: hapus saja (the=
); Anda dapat menyimpulkan jumlah padding yang dibutuhkan. Di ujung lain: balikkan saja prosesnya:dengan:
dan untuk membalikkan:
Pertanyaan yang menarik, bagaimanapun, adalah: apakah ini pendekatan yang sama yang digunakan "pustaka codec umum"? Ini tentu akan menjadi hal pertama yang masuk akal untuk diuji - ini adalah pendekatan yang cukup umum.
sumber
==
padding, 2x8 dikodekan sebagai 3x6 dengan=
padding, 3x8 dikodekan sebagai 4x6 tanpa padding lalu disejajarkan sehingga berulang. Tidak ada yang pernah dikodekan menjadi 1x6 bit, jadi Anda tidak perlu===
padding.Anda dapat menggunakan kelas
Base64UrlEncoder
dari namespaceMicrosoft.IdentityModel.Tokens
.sumber
Pilihan lain, jika Anda menggunakan ASP.NET Core, akan menggunakan
Microsoft.AspNetCore.WebUtilities.WebEncoders.Base64UrlEncode
.Jika Anda tidak menggunakan ASP.NET Inti, yang
WebEncoders
sumber tersedia di bawah Lisensi Apache 2.0 .sumber
Berdasarkan jawaban di sini dengan beberapa peningkatan kinerja, kami telah menerbitkan implementasi base64 aman-url yang sangat mudah digunakan ke NuGet dengan kode sumber yang tersedia di GitHub (berlisensi MIT).
Penggunaannya semudah
sumber
"string".Replace
untukencode
metode, tetapi loop dengan Menggantikan panduan untukdecode
?Untuk mendapatkan pengkodean seperti base64 yang aman untuk URL, tetapi bukan "base64url" menurut RFC4648, gunakan
System.Web.HttpServerUtility.UrlTokenEncode(bytes)
untuk mengenkode, danSystem.Web.HttpServerUtility.UrlTokenDecode(bytes)
untuk mendekode.sumber
Solusi paling sederhana: (tanpa bantalan)
Penghargaan diberikan kepada: Tholle
sumber
Berikut adalah metode lain untuk memecahkan kode base64 aman-url yang dikodekan dengan cara yang sama dengan Marc. Saya hanya tidak mengerti mengapa
4-length%4
berhasil (berhasil).Sebagai berikut, hanya panjang bit asal yang merupakan kelipatan persekutuan dari 6 dan 8, base64 tidak menambahkan "=" ke hasil.
Jadi kita bisa melakukan sebaliknya, jika panjang bit hasil tidak habis dibagi 8, maka ditambahkan:
sumber
Menggunakan mesin kriptografi Microsoft di UWP.
sumber
Jawaban Karanvir Kang bagus dan saya memilihnya. Namun, itu meninggalkan karakter ganjil di akhir string (menunjukkan jumlah karakter padding yang dihapus). Inilah solusi saya.
sumber