首先需要明確,base64編碼是一種可逆的編碼方式,且其不算是加密方式,可是起到了一個看起來混淆原文的作用.
提到編碼方式,我們會想到的肯定是Ascii、GBK、Unicode這些常用的編碼方法,那么Base64與這些編碼方式有什么不同呢?
簡單來將,Base64就是一種用64個Ascii字符來表示任意二進制數據的方法。主要用于將不可打印的字符轉換成可打印字符,或者簡單的說將二進制數據編碼成Ascii字符。Base64是網絡上最常用的傳輸8bit字節數據的編碼方式之一。
Base64的原理其實很簡單,首先,需要準備一個包含64個字符的表格(如下表),0~63分別對應了唯一一個字符,比如18對應的是S。
所以,Base64編碼會把3字節的二進制數據編碼為4字節的文本數據,長度增加為原來的4/3。
其實,長度比在編碼中是極為重要的一個元素,假如長度比越小(存在小于1的情況),則需要越大的編碼字符集;假如長度比越大,則編碼后的長度越大,意味著數據量變大,傳輸的時間變長。之所以Base64被廣泛地用于數據傳輸的原因之一,就是它能在編碼字符集的大小與編碼后數據量的大小中取得比較好的平衡,即有一個恰到好處的長度比。
如果要編碼的二進制數據不是3的倍數,最后會剩下1個或2個字節怎么辦?此時,需在原數據后面添加1個或2個零值字節,使其字節數是3的倍數。然后,在編碼后的字符串后面添加1個或2個等號“=”,表示所添加的零值字節數。解碼的時候,會自動去掉。
所以,base64 實際上是用65個字符表示所有的二進制數據
下面來看一下Base64編碼的優缺點。
優點:可以將二進制數據轉換成可打印字符,方便傳輸數據;對數據進行簡單的加密,肉眼安全。
缺點:內容編碼后的體積會變大,編碼和解碼需要額外的工作量。
它的使用場景有很多,比如將圖片等資源文件以Base64編碼形式直接放于代碼中,使用的時候反Base64后轉換成Image對象使用;有些文本協議不支持不可見字符的傳遞,只能轉換成可見字符來傳遞信息。有時在一些特殊的場合,大多數消息是純文本的,偶爾需要用這條純文本通道傳一張圖片之類的情況發生的時候,就會用到Base64,比如多功能Internet 郵件擴充服務(MIME)就是用Base64對郵件的附件進行編碼的