base64 編解碼及使用
前言
大部分尋找 base64,只是為了使用而已,所以先說如何使用。
不用尋找相關的 base64 庫,不用自己處理編解碼,直接調用瀏覽器自身 API。既然減少完全不必要加載的 js 文件。
應用
-
Base64 解碼
window.atob
例如:
window.atob('aGVsbG8gd29yZA==')
"hello word"
-
Base64 編碼
window.btoa
例如:
window.btoa('hello word')
"aGVsbG8gd29yZA=="
就是這么簡單!
兼容性: IE10+ 以后所有現代瀏覽器都支持,所以放棄 IE 吧!同時,不支持Unicode字符的編碼, 需配合encodeURIComponent、decodeURIComponent來使用。
這是一條迷人的分割線
base64 是什么?
引用百度百科的話:
Base64 是網絡上最常見的用於傳輸 8Bit 字節碼的編碼方式之一,Base64 就是一種基於 64 個可打印字符來表示二進制數據的方法。可查看 RFC2045 ~ RFC2049,上面有 MIME 的詳細規范。
Base64 編碼是從二進制到字符的過程,可用於在 HTTP 環境下傳遞較長的標識信息。采用 Base64 編碼具有不可讀性,需要解碼后才能閱讀。
有點拗口,即 base 是一種編碼方式,不是加密,不是加密,不是加密。
白話:選出 64 個字符集(實際上 65 個, A-Z,a-z,0-9,+,/,再加墊字符 = ),並將內容按照一定的規則轉換成字符集的字符。
索引表:
64 個 字符
A~Z -> 0~25
a~z -> 26~51
0~9 -> 52~61
+ -> 62
- -> 63
編碼規則:
-
每三個字節為一組,一共是 24 個二進制位。
-
將 24 個二進制位分為四小組,每小組 6 個二進制位。
-
在每小組前面加上 00,構成 32 為二進制,即 4 個字節。
例如:
"Cat"
C ASCII 十進制:67 二進制:0100 0011
a ASCII 十進制:97 二進制:0110 0001
t ASCII 十進制:116 二進制:0111 0100
合起來為:0100 0011 0110 0001 0111 0100
分為四組:010000 110110 000101 110100
添加前綴:00010000 00110110 00000101 00110100
對應的十進制值為:16 54 5 54
對應上面的索引表:Q2F0
-
字節數不足 3 的情況:
-
2 個字節的情況:
2 個字節的一共 16 個二進制位,按照上面的規則,轉成三組,分別為6,6,4,最后一組除了前面加兩個 0 以外,后面也要加兩個 0。這樣得到一個三位的 Base64 編碼,同時在末尾補上一個"="號。
'Hi' H ASCII 十進制:72 二進制:0100 1000 i ASCII 十進制:105 二進制:0110 1001 即:0100 1000 0110 1001 拆:010010 000110 1001 補:00010010 00000110 00100100 組:18 6 36 對應索引:SGk=
-
1 個字節的情況:
將8位二進制,分為2組,6和2,最后一組2為,前面補兩個0,后面補4個0。構成16位兩個字節, 並在末尾補上兩個==號。
'H' H ASCII 十進制:72 二進制:0100 1000 拆:010010 00 補:00010010 00000000 組:18 0 對應索引:SA==
-
其他字符自詢搜索 ASCII 表
解碼
解碼其實就是一個逆推的過程。
-
每4個字符為一組,查找字符其索引值。
-
將其索引值,轉為二進制,並將每個二進制前面的00去掉
-
將剩下的24位二進制轉為分為3份,組成3個字節
-
查找ASCII表,組成字符串。