文章出處

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('=', '.');
       }


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()