什麼是「可列印字元」呢?為什麼要用它來傳輸8bit位元組碼呢?在回答這兩個問題之前我們有必要來思考一下什麼情況下需要使用到base64?base64一般用於在http協議下傳輸二進位制資料,由於http協議是文字協議,所以在http協議下傳輸二進位制資料需要將二進位制資料轉換為字元資料。然而直接轉換是不行的。因為網路傳輸只能傳輸可列印字元。
什麼是可列印字元?在ascii碼中規定,
0~31、128這33個字元屬於控制字元,32~127這95個字元屬於可列印字元,也就是說網路傳輸只能傳輸這95個字元,不在這個範圍內的字元無法傳輸。
那麼該怎麼才能傳輸其他字元呢?其中一種方式就是使用base64。
base64,就是使用64個可列印字元來表示二進位制資料的方法。base64的索引與對應字元的關係如下表所示:
base64編碼方法要求把每三個8bit的位元組轉換為四個6bit的位元組,其中,轉換之後的這四個位元組中每6個有效bit為是有效資料,空餘的那兩個 bit用0補上成為乙個位元組。因此base64所造成資料冗餘不是很嚴重,base64是當今比較流行的編碼方法,因為它編起來速度快而且簡單。
舉個例子,有三個位元組的原始資料:aaaaaabb bbbbccccc ccdddddd (這裡每個字母表示乙個bit位)
那麼編碼之後會變成: 00aaaaaa 00bbbbbb 00cccccc 00dddddd
所以可以看出base64編碼簡單,雖然編碼後不是明文,看不出原文,但是解碼也很簡單。
換個例子可以看到,取單詞day三個字元,對應的二進位制數為:01000100 01000001 01011001,可以看到三個8bit,base64轉換後的二進位制為00010001 00000100 00000101 00011001,對應上圖base64關係表中為:refz 。
假如加密字串不是三的倍數,例如da為兩個字元,對應的二進位制數為:01000100 01000001,在base64加密規定中,不足三個倍數字元用零填充,也就是說對應二進位制應該為:01000100 01000001 00000000 ,也就是說對應base64的二進位制為:
00010001 00000100 00000100 00000000,對應base64字元為:ree= 。
加密原理懂了,解密方式也就簡單明瞭了。
由於某些系統中只能使用ascii字元。base64就是用來將非ascii字元的資料轉換成ascii字元的一種方法。base64特別適合在http,mime協議下快速傳輸資料。base64其實不是安全領域下的加密解密演算法。雖然有時候經常看到所謂的base64加密解密。其實base64只能算是乙個編碼演算法,對資料內容進行編碼來適合傳輸。雖然base64編碼過後原文也變成不能看到的字元格式,但是這種方式很初級,很簡單。
在設計這個編碼的時候,我想設計人員最主要考慮了3個問題:
1.是否加密?
2.加密演算法複雜程度和效率
3.如何處理傳輸?
加密是肯定的,但是加密的目的不是讓使用者傳送非常安全的email。這種加密方式主要就是「防君子不防小人」。即達到一眼望去完全看不出內容即可。
基於這個目的加密演算法的複雜程度和效率也就不能太大和太低。和上乙個理由類似,mime協議等用於傳送email的協議解決的是如何收發email,而並不是如何安全的收發email。因此演算法的複雜程度要小,效率要高,否則因為傳送email而大量占用資源,路就有點 走歪了。
如果是基於以上兩點,那麼我們使用最簡單的愷撒法即可。
為什麼base64看起來要比愷撒法複雜呢?這是因為在email的傳送過程中,由於歷史原因,email只被允許傳送ascii字元,即乙個8位位元組的低7位。因此,如果您傳送了一封帶有非ascii字元(即位元組的最高位是1)的email通過有「歷史問題」的閘道器時就可能會出現問題。閘道器可能會把最高位置為0!很明顯,問題就這樣產生了!因此,為了能夠正常的傳送email,這個問題就必須考慮!所以,單單靠改變字母的位置的愷撒之類的方案也就不行了。
base64編碼 動畫演示 Base 64 編碼
base64 是一種十分流行的編碼方式,僅僅使用 64 個字元加等號 就可以以文字的形式表示所有的二進位制資料了,因為它能夠把二進位制格式通過編碼轉換成可見字元,所有我們就可以通過的把二進位制格式比如,檔案等通過 base64 編碼然後通過文字的形式共享出去,是不是很神奇呀。把輸入的資料轉換成 二進...
C 處理base64 以及base64的原理分析
base64的原理,base64的碼表只有64個字元,如果要表達64個字元的話,使用6的bit即可完全表示 2的6次方為64 因為base64的編碼只有6個bit即可表示,而正常的字元是使用8個bit表示,8和6的最小公倍數是24,所以4個base64字元可以表示3個標準的ascll字元 publi...
物件base64轉碼 Base64編碼轉換
1 為什麼mime要有編碼轉換 在mime總結這篇經驗中,總結了mime相較於rfc 822的擴充套件功能,其中提到了rfc 822的缺陷 非英語字元都不能在電子郵件中使用 2 電子郵件中不能插入二進位制檔案 如 3 電子郵件不能有附件。能夠對文字進行簡單的加密 2 quoted printable...