base64編碼

Base64 is a group of similar binary-to-text encoding schemes that represent binary data in an ASCII string format by translating it into a radix-64 representation. 
Base64是一種用64個可打印字符來表示任意二進制數據的方法,不能用於加密。
爲何使用Base64格式編碼?
在只支持純文本的協議中須要保存非字符類數據(url(data:image/png;base64,iVBORw0KGgo…;)),或在只支持ASCII字符的系統中保存非ASCII字符的數據時,能夠將數據的二進制形式編碼成Base64形式保存。
ASCII碼的128~255之間的值是不可見字符,在純文本協議的傳輸過程當中可能會被錯誤看成控制字符處理引發傳輸失敗。所有編碼成可見字符,下降出錯的可能性。
Base64的編碼轉換方式
將每三個字節分爲一組,一共是24 bit。
將這24個二進制位分爲四組,每一個組有6個二進制位。
在每組前面固定先加00,這樣每組仍是8 bit,有效位是每組的低6位。即原來3個字節擴展成32個二進制位四字節。(每組最高值爲63)
而後查表獲得編碼後的字符串。Base64將三個字節轉化成四個字節,編碼後的文本會比原文多三分之一。
Base64編碼表
碼值
字符
 
 
碼值
字符
 
碼值
字符
 
碼值
字符
0
A
 
26
a
52
0
62
+


 




63
/
 編碼實例:
source ASCII (if <128) M a n source octets 77 (0x4d) 97 (0x61) 110 (0x6e) Bit pattern 0 1 0 0 1 1 0 1 0 1 1 0 0 0 0 1 0 1 1 0 1 1 1 0 Index 19 22 5 46 Base64-encoded T W F u Unicode Point 84 (0x54) 87 (0x57) 70 (0x46) 117 (0x75)   str.charCodeAt() 方法可返回指定位置的字符的 Unicode 編碼,返回值是 0 - 65535 之間的整數。String.fromCharCode(code)方法將編碼轉爲對應的字符。
若是要編碼的二進制數據不是3的倍數,分組後後會剩下1個或2個字節。Base64用x00在末尾補足一組後,再在編碼的末尾加上1個或2個=號,表示爲了湊成一組補了多少字節。 
多一個字節時:先在該字節以後添加2個x00字節組成一組,再按照上面的規則轉換成base64碼的4字節。每一個字節前面2位固定爲0,最後在Base64編碼的末尾補上兩個"="號,表示補了2個字節。
好比,"M"這個字母是一個字節,能夠轉化爲二組000100十一、00010000,對應的Base64值分別爲T、Q,再補上二個"="號,所以"M"的Base64編碼就是TQ==。
Text content M  添加x00補足一組  添加x00補足一組 ASCII 77 (0x4d) 0 (0x00) 0 (0x00) Bit pattern 0 1 0 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Index 19 16 0 0 Base64-encoded T Q = = 多二個字節時:先在這兩個字節以後添加1個x00組成一組,再按照上面的規則轉換成base64的4字節,最後在末尾補上一個"="號。
好比,"Ma"這個字符串是兩個字節,能夠轉化成三組000100十一、000101十、00000100之後,對應Base64值分別爲T、W、E,再補上一個"="號,所以"Ma"的Base64編碼就是TWE=。 
Text content M a   ASCII 77 (0x4d) 97 (0x61) 0 (0x00) Bit pattern 0 1 0 0 1 1 0 1 0 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 Index 19 22 4 0 Base64-encoded T W E = 中文用Base64編碼
先要得到二進制數據,再根據上述規則轉換。不一樣的中文編碼方式對應的二進制不一樣,全部若是不統一容易出現亂碼。
"嚴"的utf-8編碼爲3字節E4B8A5,寫成二進制就是三字節的"11100100 10111000 10100101",而後轉換成Base64值就是5Lil。
轉載於猿2048:➻《base64編碼》php

相關文章
相關標籤/搜索