Base64和ASCII的區別
ASCII碼的範圍是0-127,其中0-31和127這33個字符屬於控制字符,剩下的32-126這95個字符屬於可打印字符,包含了數字、大小寫字母和常用符號等。他們與十進制的對應關係如下:
這裏面的某些字節在某些傳輸渠道中不支持, 比如郵件傳輸SMTP協議就不支持上面ASCII碼中的控制字符, 只能傳輸可打印的ASCII字符。另外當byte值>127時,就超出了ASCII的表示範圍,Base64的創建就是爲了解決此問題。
base64是一種編碼算法,Base64內的64是指64個字符【可打印字符】, 分別是 A-Z, a-z, 0-9, +, /它們與十進制的對應關係如下:
Base64採用6bit字符表達了原本的8bit字符,它可以將原本ACSII碼的控制字符以及ASCII碼之外的byte數字都轉換成可打印的64位字符。
Base64編碼原理
- 1)將所有字符轉化爲ASCII碼;
- 2)將ASCII碼轉化爲8位二進制;
- 3)將二進制3個歸成一組(不足3個在後邊補0)共24位,再拆分成4組,每組6位;
- 4)統一在6位二進制前補兩個0湊足8位;
- 5)將補0後的二進制轉爲十進制;
- 6)從Base64編碼表獲取十進制對應的Base64編碼;例如編碼Man:
字節數不爲3的倍數時的處理過程
如果要編碼的字節數不能被3整除,最後會多出1個或2個字節,那麼可以使用下面的方法進行處理:先使用0字節值在末尾補足,使其能夠被3整除,然後再進行base64的編碼。在編碼後的base64文本後加上一個或兩個'='號,代表補足的字節數。也就是說,當最後剩餘一個八位字節(一個byte)時,最後一個6位的base64字節塊有四位是0值,最後附加上兩個等號;如果最後剩餘兩個八位字節(2個byte)時,最後一個6位的base字節塊有兩位是0值,最後附加一個等號。 參考下表:
'A'base64編碼結果:'QQ =='
'BC'base64編碼結果:QKM=
喜歡的關注我吧!