URL安全的Base64編碼


Base64編碼可用於在HTTP環境下傳遞較長的標識信息。在其他應用程序中,也常常需要把二進制數據編碼為適合放在URL(包括隱藏表單域)中的形式。此時,采用Base64編碼不僅比較簡短,同時也具有不可讀性,即所編碼的數據不會被人用肉眼所直接看到。

然而,標准的Base64並不適合直接放在URL里傳輸,因為URL編碼器會把標准Base64中的「/」和「+」字符變為形如「%XX」的形式,而這些「%」號在存入數據庫時還需要再進行轉換,因為ANSI SQL中已將「%」號用作通配符。

為解決此問題,可采用一種用於URL的改進Base64編碼,它不在末尾填充'='號,並將標准Base64中的「+」和「/」分別改成了「*」和「-」,這樣就免去了在URL編解碼和數據庫存儲時所要作的轉換,避免了編碼信息長度在此過程中的增加,並統一了數據庫、表單等處對象標識符的格式。

URL安全的Base64編碼適用於以URL方式傳遞Base64編碼結果的場景。該編碼方式的基本過程是先將內容以Base64格式編碼為字符串,然后檢查該結果字符串,將字符串中的加號+換成中划線-,並且將斜杠/換成下划線_

詳細編碼規范請參考RFC4648標准中的相關描述。

補充:對於末尾的“=”占位符,Bouncy Castle將之用.代替,而Commons Codes杜絕任何的補位符。下面的示例代碼使用了Bouncy Castle的方法,將“=”用“.”代替。

用於URL的改進版Base64編碼C#實現:

       /// <summary>
       /// 從二進制字符轉換為適用於URL的Base64編碼字符串
       /// < /summary>
       public static string ToBase64StringForUrl(byte[] token)
       {
           return Convert.ToBase64String(token).Replace('+', '*')
               .Replace('/', '-')
               .Replace('=', '.');
       }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM