解碼base64 Base64原理

2021-10-14 18:50:11 字數 979 閱讀 6696

一、為什麼會產生base64編碼?

因為有些老的通訊協議(比如smtp),只支援傳遞可見字元,無法傳輸像回車、空格等不可見的控制字元,像這種二進位制檔案,其中可能含有不可見字元,那老的傳輸協議為了能夠傳輸,就需要有個編碼規則,把二進位制檔案中的不可見字元全部編碼成可見字元,所以就誕生了base64編碼規則。

二、編碼規則是怎樣的?

base64編碼採用64個字元來編碼任意資料,這64個字元是大寫的a-z,小寫的a-z,數字0-9,還有+和/。這些字元都是可列印的。

假如要編碼乙個非二進位制字元,base64的編碼規則是先把這個字元處理成二進位制,然後每連續6個bit計算其十進位制,得出十進位制的值之後,再根據base64對照表找到對應的字元。

三、例項

編碼'hello!'

base64對照表

對照這個**找到base64編碼後的字元:

'hello!' 轉換為了s**sbg8h,6個字元轉換為8個字元,每3個字元轉換為4個字元。

四、延伸

如果原始字元不是3的倍數,該如何處理?

補充0,直到補夠3的倍數,以'hello!!'為例,7個字元。

'hello!!' 的base64編碼的結果為 s**sbg8hiqaa。

最後2個零值只是為了base64編碼而補充的,在原始字元中並沒有對應的字元,那麼base64編碼結果中的最後兩個字元 aa 實際不帶有效資訊,所以需要特殊處理,以免解碼錯誤。

標準base64編碼通常用 = 字元來替換最後的a,即編碼結果為 s**sbg8hiq==。

因為 = 字元並不在base64編碼索引表中,其意義在於結束符號,在base64解碼時遇到 = 時即可知道乙個base64編碼字串結束。

試著寫 Base64 解碼演算法 原

dword decodebase64 lpbyte lpdes,dword dwdeslen,lpctstr lpsrc 引數 lpbyte lpdes 陣列位址 dword dwdeslen 陣列大小 lpctstr lpsrc 要解碼的字串位址 返回值為資料的真實長度 dword decodeb...

base64編碼 解碼

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

Base64編碼解碼

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