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

 

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