在UTF8編碼中一個字符占用一個字節 一個漢字占用3個字節。
11111111 11111111 11111111
Base64編碼要求把3個8位字節(3*8=24)轉化為4個6位的字節(4*6=24),之后在6位的前面補兩個0,形成8位一個字節的形式。 如果剩下的字符不足3個字節,則用0填充,輸出字符使用'=',因此編碼后輸出的文本末尾可能會出現1或2個'='。
為了保證所輸出的編碼位可讀字符,Base64制定了一個編碼表,以便進行統一轉換。編碼表的大小為2^6=64,這也是Base64名稱的由來。
通過本工具可以對代碼進行Base64加密或者解密。Base64是網絡上最常見的用於傳輸8Bit字節代碼的編碼方式之一。
把一個漢字轉化成base64編碼的過程:
1.把漢字轉化成16進制
2.把16進制轉化成2進制
3.把38=24位的二進制變成 46的二進制
4.把2進制轉化成10進制
5.根據Base64編碼表轉化成base64編碼
let buffer = Buffer.from('馮'); //將字符串轉化成16進制 console.log(buffer); //e5 86 af // 把16進制轉化成2進制 console.log((0xe5).toString(2)); console.log((0x86).toString(2)); console.log((0xaf).toString(2)); // 11100101 10000110 10101111 這個是3*8的模式 我們把這個模式轉化成4*6的模式 // 111001 011000 011010 101111 4*6模式 且最大不會超過64 // 把二進制變成10進制 console.log(parseInt('111001', 2)); console.log(parseInt('011000', 2)); console.log(parseInt('011010', 2)); console.log(parseInt('101111', 2)); // 57 24 26 47 // Base64編碼表 let str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; str += str.toLowerCase(); str += '0123456789'; str += '+/'; console.log(str[57]+str[24]+str[26]+str[47]); //5Yav /** * 5Yav就是漢字馮的base64編碼,不具有加密性,但是我們可以看到原來的漢字是3字節現在5Yav變成了4個字節 所以base64適合小圖標轉碼 */
總結:
1.base64 沒有加密功能,它只是編碼轉化base64 。
2.base64適合小圖標轉碼