Base64編碼與解碼原理

2022-06-02 19:03:10 字數 2013 閱讀 8018

base64編碼是使用64個可列印ascii字元(a-z、a-z、0-9、+、/)將任意位元組序列資料編碼成ascii字串,另有「=」符號用作字尾用途。

base64編碼與解碼的基礎索引表如下

(1)base64編碼過程

base64將輸入字串按位元組切分,取得每個位元組對應的二進位制值(若不足8位元則高位補0),然後將這些二進位制數值串聯起來,再按照6位元一組進行切分(因為2^6=64),最後一組若不足6位元則末尾補0。將每組二進位制值轉換成十進位制,然後在上述**中找到對應的符號並串聯起來就是base64編碼結果。

由於二進位制資料是按照8位元一組進行傳輸,因此base64按照6位元一組切分的二進位制資料必須是24位元的倍數(6和8的最小公倍數)。24位元就是3個位元組,若原位元組序列資料長度不是3的倍數時且剩下1個輸入資料,則在編碼結果後加2個=;若剩下2個輸入資料,則在編碼結果後加1個=。

完整的base64定義可見rfc1421和rfc2045。因為base64演算法是將3個位元組原資料編碼為4個位元組新資料,所以base64編碼後的資料比原始資料略長,為原來的4/3。

(2)簡單編碼流程

1

)將所有字元轉化為ascii碼;

2)將ascii碼轉化為8位二進位制;

3)將8位二進位制3個歸成一組(不足3個在後邊補0)共24位,再拆分成4組,每組6位;

4)將每組6位的二進位制轉為十進位制;

5)從base64編碼表獲取十進位制對應的base64編碼;

下面舉例對字串「abcd」進行base64編碼:

對於不足6位的補零(圖中淺紅色的4位),索引為「a」;對於最後不足3位元組,進行補零處理(圖中紅色部分),以「=」替代,因此,「abcd」的base64編碼為:「qujdra==」。

(1)base64解碼過程

base64解碼,即是base64編碼的逆過程,如果理解了編碼過程,解碼過程也就容易理解。將base64編碼資料根據編碼表分別索引到編碼值,然後每4個編碼值一組組成乙個24位的資料流,解碼為3個字元。對於末尾位「=」的base64資料,最終取得的4位元組資料,需要去掉「=」再進行轉換。

(2)base64解碼特點

base64編碼中只包含64個可列印字元,而php在解碼base64時,遇到不在其中的字元時,將會跳過這些字元,僅將合法字元組成乙個新的字串進行解碼。下面編寫乙個簡單的**,測試一組資料看是否滿足我們所說的情況。

從結果中可以看到乙個字串中,不管出現多少個特殊字元或者位置上的差異,都不會影響最終的結果,可以驗證base64_decode是遇到不在其中的字元時,將會跳過這些字元,僅將合法字元組成乙個新的字串進行解碼。

Base64編碼解碼原理

一.base64編碼由來 為什麼會有base64編碼呢?因為有些網路傳送渠道並不支援所有的位元組,例如傳統的郵件只支援可見字元的傳送,像ascii碼的控制字元就不能通過郵件傳送。這樣用途就受到了很大的限制,比如二進位製流的每個位元組不可能全部是可見字元,所以就傳送不了。最好的方法就是在不改變傳統協議...

Base64編碼解碼原理詳解

1.base64字元的組成部分 base64所用字元 0,1,2 9 a,b,c,d z a,b,c,d z 對應ascii 48,49 58,65,66 90,97,98 122,43,47 2.10個數字,26個大寫字母,26個小寫字母,1個 乙個 剛好64個字元 3.base64是將每3個字元...

base64編碼 解碼

ps base64是一種資料編碼方式,目的是讓資料符合傳輸協議的要求,有些人誤用它進行資料加密 base64編碼 nsstring base64encodedstringwithstring nsstring string base64解碼 nsstring base64decodedstringw...