Base64編碼原理

1竭恬、Base64編碼原理

下圖為Base64編碼索引表:


Base64編碼索引表

字符選用了"A-Z战坤、a-z、0-9向图、+枢希、/" 64個(gè)可打印字符桌吃。數(shù)值代表字符的索引,這個(gè)是標(biāo)準(zhǔn)Base64協(xié)議規(guī)定的苞轿,不能更改茅诱。

2、關(guān)于編碼和解碼

  • 編碼:由二進(jìn)制轉(zhuǎn)到字符成為Base64編碼搬卒,所謂Base64編碼就是將所有二進(jìn)制數(shù)據(jù)轉(zhuǎn)換為Base64字符的過(guò)程瑟俭。
  • 解碼:由字符轉(zhuǎn)化為二進(jìn)制的過(guò)程,所謂Base64解碼就是將Base64字符轉(zhuǎn)到二進(jìn)制的過(guò)程契邀。

3摆寄、關(guān)于ASCII碼表

下圖為國(guó)際上標(biāo)準(zhǔn)的ASCII碼表:


我們知道所有的可打印字符都有其對(duì)應(yīng)的ASCII碼,如“M”對(duì)應(yīng)的ASCII碼為01001101坯门,字符“z”對(duì)應(yīng)的ASCII碼為01111010微饥,我們知道,Base64字符最多能表示6bit(2^6=64)古戴,而一個(gè)字符占一個(gè)字節(jié)(8bit)欠橘,所以3個(gè)字符可用Base64的4個(gè)字符表示(6和8的最小公倍數(shù)為24),所以對(duì)于一個(gè)字符串來(lái)講现恼,每次進(jìn)行Base64編碼時(shí)肃续,都是已三個(gè)字節(jié)為單位進(jìn)行轉(zhuǎn)換(三個(gè)字節(jié)恰好可以用4個(gè)Base64字符表示),對(duì)于不夠三個(gè)字節(jié)的情況述暂,即當(dāng)一個(gè)字符串的長(zhǎng)度對(duì)3取余的余數(shù)為1或者2時(shí)痹升,可以用兩個(gè)Base64字符表示一個(gè)普通字符,或者用三個(gè)Base64字符表示兩個(gè)普通字符畦韭,普通字符通過(guò)ASCII碼轉(zhuǎn)換為二進(jìn)制時(shí)疼蛾,為8bit,而兩個(gè)Base64字符轉(zhuǎn)換為二進(jìn)制時(shí)為12bit,如何轉(zhuǎn)換呢艺配?根據(jù)規(guī)則察郁,需要在普通字符的二進(jìn)制表示的末尾用0補(bǔ)齊12bit之后衍慎,再進(jìn)行Base64字符的轉(zhuǎn)換,字符串的轉(zhuǎn)換規(guī)則為:先將普通字符串參照ASCII碼表全部轉(zhuǎn)換為二進(jìn)制皮钠,從左到右稳捆,每3個(gè)字節(jié)為一組進(jìn)行轉(zhuǎn)換,每3個(gè)字節(jié)(3個(gè)普通字符)對(duì)應(yīng)4個(gè)Base64字符麦轰,對(duì)于末尾剩余一個(gè)8bit(剩余一個(gè)字符)的情況乔夯,可以用2個(gè)Base64字符表示,需在其末尾用0填充補(bǔ)齊12個(gè)bit款侵,再將這12個(gè)bit位用兩個(gè)Base64字符表示末荐,對(duì)于末尾剩余16bit(剩余兩個(gè)普通字符)的情況,可以用3個(gè)Base64字符表示新锈,需在其末尾用0補(bǔ)齊18個(gè)bit,再將這12個(gè)bit位用兩個(gè)Base64字符表示,因?yàn)锽ase64字符的最小單位是4個(gè)字符一組甲脏,在轉(zhuǎn)換后,如果Base64編碼字符串的長(zhǎng)度不是4的倍數(shù)妹笆,需在在字符串后面用“=”號(hào)填充块请,所以Base64字符串只可能在最后出現(xiàn)一個(gè)或者兩個(gè)“=”號(hào),不可能在中間出現(xiàn)“=”號(hào)拳缠,也不可能出現(xiàn)3個(gè)“=”號(hào)的情況墩新。

4、一個(gè)例子

注:圖表中藍(lán)色背景的二進(jìn)制0值是額外補(bǔ)充的
Hello!! Base64編碼的結(jié)果為 SGVsbG8hIQAA 窟坐。最后2個(gè)零值只是為了Base64編碼而補(bǔ)充的抖棘,在原始字符中并沒(méi)有對(duì)應(yīng)的字符,那么Base64編碼結(jié)果中的最后兩個(gè)字符 AA 實(shí)際不帶有效信息狸涌,所以需要特殊處理,以免解碼錯(cuò)誤最岗。
標(biāo)準(zhǔn)Base64編碼通常用 = 字符來(lái)替換最后的 A帕胆,即編碼結(jié)果為 SGVsbG8hIQ==。因?yàn)?= 字符并不在Base64編碼索引表中般渡,其意義在于結(jié)束符號(hào)懒豹,在Base64解碼時(shí)遇到 = 時(shí)即可知道一個(gè)Base64編碼字符串結(jié)束。

5驯用、應(yīng)用

Base64編碼本質(zhì)上是一種將二進(jìn)制數(shù)據(jù)轉(zhuǎn)成文本數(shù)據(jù)的方案脸秽。對(duì)于非二進(jìn)制數(shù)據(jù),是先將其轉(zhuǎn)換成二進(jìn)制形式蝴乔,然后每連續(xù)6比特(2的6次方=64)計(jì)算其十進(jìn)制值记餐,根據(jù)該值在上面的索引表中找到對(duì)應(yīng)的字符,最終得到一個(gè)文本字符串薇正。Base64編碼主要用在傳輸片酝、存儲(chǔ)囚衔、表示二進(jìn)制等領(lǐng)域,還可以用作簡(jiǎn)單的加密雕沿,但只是一眼看上去不知道什么內(nèi)容罷了练湿,但可通過(guò)其編碼規(guī)則對(duì)其進(jìn)行解碼。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末审轮,一起剝皮案震驚了整個(gè)濱河市肥哎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌疾渣,老刑警劉巖篡诽,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異稳衬,居然都是意外死亡霞捡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門薄疚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)碧信,“玉大人,你說(shuō)我怎么就攤上這事街夭∨椴辏” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵板丽,是天一觀的道長(zhǎng)呈枉。 經(jīng)常有香客問(wèn)我,道長(zhǎng)埃碱,這世上最難降的妖魔是什么猖辫? 我笑而不...
    開封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮砚殿,結(jié)果婚禮上啃憎,老公的妹妹穿的比我還像新娘。我一直安慰自己似炎,他們只是感情好辛萍,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著羡藐,像睡著了一般贩毕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上仆嗦,一...
    開封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天辉阶,我揣著相機(jī)與錄音,去河邊找鬼。 笑死睛藻,一個(gè)胖子當(dāng)著我的面吹牛启上,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播店印,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼冈在,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了按摘?” 一聲冷哼從身側(cè)響起包券,我...
    開封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎炫贤,沒(méi)想到半個(gè)月后溅固,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡兰珍,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年侍郭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掠河。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡亮元,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出唠摹,到底是詐尸還是另有隱情爆捞,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布勾拉,位于F島的核電站煮甥,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏藕赞。R本人自食惡果不足惜成肘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望斧蜕。 院中可真熱鬧艇劫,春花似錦、人聲如沸惩激。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)风钻。三九已至,卻和暖如春酒请,著一層夾襖步出監(jiān)牢的瞬間骡技,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留布朦,地道東北人囤萤。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像是趴,于是被迫代替她去往敵國(guó)和親涛舍。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Base64編碼原理 Base64編碼之所以稱為Base64唆途,是因?yàn)槠涫褂?4個(gè)字符來(lái)對(duì)任意數(shù)據(jù)進(jìn)行編碼富雅,同理有B...
    edison0428閱讀 1,714評(píng)論 1 1
  • 你知道: 為什么發(fā)送郵件的時(shí)候可以添加圖片、音頻肛搬、視頻這種二進(jìn)制文件作為附件嗎没佑? 如何將二進(jìn)制數(shù)據(jù)編碼為文本數(shù)據(jù)嗎...
    goddyzhao閱讀 386評(píng)論 0 0
  • 最近都沒(méi)怎么寫代碼,忙著上班温赔,每天上到晚上九點(diǎn)半蛤奢,回來(lái)看視頻,學(xué)習(xí)scrapy陶贼,寫了個(gè)小項(xiàng)目啤贩,無(wú)法傳回下一頁(yè)鏈接繼...
    Dash_chan閱讀 327評(píng)論 0 0
  • 當(dāng)一個(gè)人孤獨(dú)的時(shí)候 會(huì)很怕一個(gè)人 很怕一個(gè)人安靜的靜止 哪怕走著 跑著 在路上 一個(gè)人的孤獨(dú) 終究是可怕的~
    想做特立獨(dú)行的豬閱讀 185評(píng)論 0 0
  • 第一次體會(huì)情深之處必會(huì)傷身瓜晤,竟然是你通知我要分手的時(shí)候。 你說(shuō)對(duì)不起腹纳,你說(shuō)怕耽誤痢掠,你說(shuō)得不到家人祝福,你說(shuō)……只是...
    狗妮兒閱讀 365評(píng)論 0 0