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