URL安全的Base64算法

base64是取3個字節(24位)的數據強行組成4個字節(32位)的數據做爲一個分組,24位分成4個字節的話,每個字節分到6位,然後前面補兩位0,然後這個字節的值位索引去base64表找值。

1. 因爲前面補兩個0,那麼只有6位來算索引,最長就是2^6=64,所以base64表只有64個。

2. 因爲每4個字節一個分組,所以base64後的長度肯定是4的倍數。

3. 因爲不是所有的字符串都能被3整除,所以存在不夠的情況,那麼就在後面補了=號。

4. 因爲很多URL中包含了+ / =字符,做http傳輸的時候URL編碼會把這三個字符編碼掉,所以URL安全的處理是把+換成-,把/換成_,把=去掉。

所以URL安全的base64在encode後會這樣處理:

string_replace(data, "+", "-");
string_replace(data, "/", "_");
string_replace(data, "=", "");

URL安全的base64首先會這樣處理在decode:

string_replace(data, "-", "+");
string_replace(data, "_", "/");
int mod4 = data.size()%4;
if (mod4 > 0)
{
    int num = 4 - mod4;
    data.append(num, '=');
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章