base 64簡(jiǎn)介
base64是一種用64個(gè)字符來(lái)表示任意二進(jìn)制數(shù)據(jù)的方法雳攘。
base 64編碼可以將任意一組字節(jié)轉(zhuǎn)換為較長(zhǎng)的常見(jiàn)文本字符序列,從而可以合法地作為首部字段值耀态。base 64編碼將用戶輸入或二進(jìn)制數(shù)據(jù),打包成一種安全格式蝙场,將其作為HTTP首部字段的值發(fā)送出去偷遗,而無(wú)須擔(dān)心其中包含會(huì)破壞HTTP分析程序的冒號(hào)醉拓、換行符或二進(jìn)制值伟姐。
base 64編碼過(guò)程
base 64編碼將一個(gè)8位子節(jié)序列拆散為6位的片段,并為每個(gè)6位的片短分配一個(gè)字符亿卤,這個(gè)字符是base 64字母表中的64個(gè)字符之一愤兵。這64個(gè)字符中包括大小寫(xiě)字母、數(shù)字排吴、+和/秆乳,同時(shí)還包括了特殊字符=。具體內(nèi)容如下:
Value | Encoding | Value | Encoding | Value | Encoding | Value | Encoding |
---|---|---|---|---|---|---|---|
0 | A | 17 | R | 34 | i | 51 | z |
1 | B | 18 | S | 35 | j | 52 | 0 |
2 | C | 19 | T | 36 | k | 53 | 1 |
3 | D | 20 | U | 37 | l | 54 | 2 |
4 | E | 21 | V | 38 | m | 55 | 3 |
5 | F | 22 | W | 39 | n | 56 | 4 |
6 | G | 23 | X | 40 | o | 57 | 5 |
7 | H | 24 | Y | 41 | p | 58 | 6 |
8 | I | 25 | Z | 42 | q | 59 | 7 |
9 | J | 26 | a | 43 | r | 60 | 8 |
10 | K | 27 | b | 44 | s | 61 | 9 |
11 | L | 28 | c | 45 | t | 62 | + |
12 | M | 29 | d | 46 | u | 63 | / |
13 | N | 30 | e | 47 | v | --- | --- |
14 | O | 31 | f | 48 | w | (pad) = | --- |
15 | P | 32 | g | 49 | x | --- | --- |
16 | Q | 33 | h | 50 | y | --- | --- |
以“Hello!”為例钻哩,他的ASCII對(duì)應(yīng)關(guān)系如下:
{:width="50%"}
可知 Hello! 的Base64編碼結(jié)果為 SGVsbG8h 屹堰,原始字符串長(zhǎng)度為6個(gè)字符,編碼后長(zhǎng)度為8個(gè)字符街氢,每3個(gè)原始字符經(jīng)Base64編碼成4個(gè)字符扯键,編碼前后長(zhǎng)度比4/3,這個(gè)長(zhǎng)度比很重要 - 比原始字符串長(zhǎng)度短珊肃,則需要使用更大的編碼字符集荣刑,這并不我們想要的;長(zhǎng)度比越大伦乔,則需要傳輸越多的字符厉亏,傳輸時(shí)間越長(zhǎng)。Base64應(yīng)用廣泛的原因是在字符集大小與長(zhǎng)度比之間取得一個(gè)較好的平衡烈和,適用于各種場(chǎng)景爱只。
Base64編碼是每3個(gè)原始字符編碼成4個(gè)字符,如果原始字符串長(zhǎng)度不能被3整除招刹,需要使用0值來(lái)補(bǔ)充原始字符串:
{:width="50%"}
標(biāo)準(zhǔn)Base64編碼通常用 = 字符來(lái)替換最后的 A虱颗,即編碼結(jié)果為 SGVsbG8hIQ==。因?yàn)?= 字符并不在Base64編碼索引表中蔗喂,其意義在于結(jié)束符號(hào)忘渔,在Base64解碼時(shí)遇到 = 時(shí)即可知道一個(gè)Base64編碼字符串結(jié)束。