ฉันต้องการเข้ารหัสข้อมูล base64 เพื่อใส่ไว้ใน URL แล้วถอดรหัสภายใน HttpHandler ของฉัน
ฉันพบว่าการเข้ารหัส Base64อนุญาตให้มีอักขระ '/' ซึ่งจะทำให้การจับคู่ UriTemplate ของฉันยุ่งเหยิง จากนั้นฉันพบว่ามีแนวคิด "แก้ไข Base64 สำหรับ URL" จาก wikipedia:
มีการแก้ไข Base64 สำหรับตัวแปร URL โดยที่จะไม่มีการใช้ padding '=' และอักขระ '+' และ '/' ของ Base64 มาตรฐานจะถูกแทนที่ด้วย '-' และ '_' ตามลำดับดังนั้นการใช้ตัวเข้ารหัส / ตัวถอดรหัส URL ไม่จำเป็นอีกต่อไปและไม่มีผลกระทบต่อความยาวของค่าที่เข้ารหัสโดยปล่อยให้รูปแบบที่เข้ารหัสเดิมไม่เสียหายสำหรับใช้ในฐานข้อมูลเชิงสัมพันธ์เว็บฟอร์มและตัวระบุอ็อบเจ็กต์โดยทั่วไป
การใช้. NET ฉันต้องการแก้ไขโค้ดปัจจุบันของฉันจากการเข้ารหัสและถอดรหัส base64 พื้นฐานไปสู่การใช้เมธอด "modified base64 for URL" มีใครทำแบบนี้บ้าง?
ในการถอดรหัสฉันรู้ว่ามันเริ่มต้นด้วยสิ่งต่างๆเช่น:
string base64EncodedText = base64UrlEncodedText.Replace('-', '+').Replace('_', '/');
// Append '=' char(s) if necessary - how best to do this?
// My normal base64 decoding now uses encodedText
แต่ฉันอาจต้องเพิ่มตัวอักษร '=' หนึ่งหรือสองตัวต่อท้ายซึ่งดูซับซ้อนกว่าเล็กน้อย
ตรรกะการเข้ารหัสของฉันควรจะง่ายกว่านี้เล็กน้อย:
// 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('/', '_');
ฉันเคยเห็นรายการGuid to Base64 สำหรับ URL StackOverflow แต่มีความยาวที่ทราบแล้วดังนั้นพวกเขาจึงสามารถฮาร์ดโค้ดจำนวนเครื่องหมายเท่ากันที่ต้องการในตอนท้ายได้