(二)base64編碼的前世今生

1.??什么是BASE64編碼

BASE64就是一種基于64個可打印字符來表示二進制數(shù)據(jù)的方法。換句話說贬堵,就是將二進制數(shù)編碼成為64個可打印字符(符合ASCII編碼規(guī)則)错敢。

2.??為什么會出現(xiàn)BASE64 編碼

最早的郵件系統(tǒng)只處理ASCII編碼比驻,ASCII碼為7位有效碼胁后,一共包括。因此舊的郵件系統(tǒng)就會以為收到的8位字節(jié)碼都是以ASCII編碼的琼娘,并不理會最高位峭弟,或者簡單粗暴的處理最高位附鸽,如:截斷最高位。

后來瞒瘸,郵件的內(nèi)容越來越豐富了坷备,人們不僅想傳輸英文字符,還想傳輸如:中文(各種不同的編碼)情臭,圖片省撑、視頻(二進制文件)等更加豐富的內(nèi)容。然而俯在,這些內(nèi)容的編碼超出了ASCII碼的范圍竟秫,若不加以處理,這些編碼在經(jīng)過舊的郵件系統(tǒng)時跷乐,若最高位被截斷了肥败,信息就損失了,接收方?jīng)]有辦法判斷發(fā)送過來的字符最高位是0還是1愕提,也就無法正確還原發(fā)送方發(fā)出的數(shù)據(jù)馒稍。

怎么辦呢?很簡單浅侨,就是發(fā)送方把這些內(nèi)容按照一定規(guī)則重新編碼成符合ASCII碼格式的編碼纽谒,使其能夠順利通過那些問題郵件系統(tǒng)而不會有信息損失,接收方再按照對應(yīng)的規(guī)則還原回來如输。

于是鼓黔,當當當,BASE64應(yīng)運而生不见,這樣所有的二進制都可以轉(zhuǎn)換成ASCII編碼格式進行傳輸了澳化。

3.?BASE64編碼規(guī)則

1. BASE64編碼基于以下64個可打印字符:A-Z、a-z脖祈、0-9肆捕、+刷晋、/盖高。64個字符只需要使用6個bit即可完全表示(2的6次方為64)。

2. 二進制字符串轉(zhuǎn)換成BASE64的方法是:

(1)每3個8位字符分隔為4個6位字符眼虱。(因為Base64的編碼只有6個bit即可表示喻奥,而正常的字符是使用8個bit表示, 8和6的最小公倍數(shù)是24捏悬,所以4個Base64字符可以表示3個8位字符)撞蚕。

(2)在6位字符的最高2位補0,查表可得對應(yīng)的可打印字符过牙。

(3)當二進制字節(jié)數(shù)少于3個甥厦,即二進制bit數(shù)不是6的倍數(shù)時:二進制位數(shù)補零直到bit數(shù)為6的最小公倍數(shù)纺铭,再按6位分隔查表得到對應(yīng)的BASE64可打印字符;最后刀疙,將編碼結(jié)果用“=”補齊為4個字符舶赔。【why谦秧?為了與原碼中本來有的0進行區(qū)別】

例:將a進行BASE64編碼為YQ==



4.??BASE64的應(yīng)用場景

什么情況下需要用到BASE64編碼呢竟纳?那取決于BASE64都能做什么。經(jīng)過BASE64編碼后疚鲤,數(shù)據(jù)變成了64個ASCII編碼的數(shù)據(jù)锥累,也就是說:

?密碼均是常用可見的字符

?密碼均由64個常用字符組成

?無法一眼看出密碼的內(nèi)容

對應(yīng)的,使用BASE64密碼的動機可以歸納為:

?將不可見字符轉(zhuǎn)換為可見字符

?對消息格式進行保護

?對消息內(nèi)容進行簡單保護(防君子不防小人)

(1)將不可見字符轉(zhuǎn)換為可見字符

?網(wǎng)頁中圖片等二進制數(shù)據(jù)的BASE64編碼

(參考:http://www.webhek.com/post/data-url.html

前端在實現(xiàn)頁面時集歇,對于一些簡單的圖片桶略,為了避免瀏覽器加載外部資源,可以將圖片內(nèi)容直接嵌入到網(wǎng)頁里鬼悠。這就是瀏覽器的Data

URLs 的特性删性,它可以優(yōu)化網(wǎng)站加載速度和執(zhí)行效率。圖片數(shù)據(jù)是二進制數(shù)據(jù)焕窝,沒有辦法描述蹬挺。使用Base64對圖片或其他文件的二進制數(shù)據(jù)進行編碼后,這些數(shù)據(jù)就變成了可見字符它掂。

(2)對消息格式進行保護

與郵件系統(tǒng)處理非ASCII編碼會遇到的問題類似巴帮,其基本目的是保證發(fā)送方發(fā)出的內(nèi)容經(jīng)過網(wǎng)絡(luò)傳輸后能夠被正確的還原。這是處理包含特殊字符的消息最簡單有效的實現(xiàn)方式虐秋,避免了發(fā)送方和接收方對消息中的字符進行逐個處理的復雜性榕茧。

?URL與Cookie

URL通常以冒號和斜杠來對URL的內(nèi)容進行分隔。URL中還會傳遞一些用戶輸入客给、二進制數(shù)據(jù)等參數(shù)用押。當這些內(nèi)容中包含了冒號和斜杠等特殊字符時,若不加以處理靶剑,會影響WEB系統(tǒng)對URL格式的解析蜻拨。因此,將參數(shù)內(nèi)容進行BASE64編碼以后再進行傳輸桩引,就可以降低系統(tǒng)處理特殊字符的復雜性缎讼。同時發(fā)送者和接收者無須擔心傳輸?shù)膬?nèi)容會破壞HTTP分析程序的冒號、換行符或二進制值坑匠。

?Cookie

(參考:https://www.cnblogs.com/andy-zhou/p/5360107.html#_caption_0

Cookie是服務(wù)器通過HTTP頭發(fā)送給客戶端的數(shù)據(jù)血崭,為了在HTTP頭部無損的傳遞這些消息內(nèi)容,通常也需要對cookie的內(nèi)容進行base64編碼。通常在cookie中傳遞的二進制數(shù)據(jù)包括圖片夹纫、證書等咽瓷。

注:由于標準的Base64編碼后可能出現(xiàn)字符+和/,在URL中就不能直接作為參數(shù)舰讹,所以又有一種"url safe"的base64編碼忱详,其實就是把字符+和/分別變成-和_。

?結(jié)構(gòu)化文本

參考:https://blog.csdn.net/qq_27274997/article/details/78215934

一個xml當中包含另一個xml數(shù)據(jù)跺涤,此時如果將xml數(shù)據(jù)直接寫入顯然不合適匈睁,將xml進行適當編碼存入較為方便,事實上xml當中的字符一般都是可見字符(0-127之間)桶错,但是由于中文的存在航唆,可能存在不可見字符,直接將字符打印在外層xml的數(shù)據(jù)中顯然不合理院刁,那么怎么辦呢糯钙?可以使用base64進行編碼,然后存入xml退腥,解碼反之其實還有個辦法任岸,將byte的值寫在xml當中,空格或者狡刘,分開享潜,這樣也可以將byte數(shù)據(jù)傳入,不過這樣更浪費空間嗅蔬,并且不易保存剑按。


(3)對消息內(nèi)容進行簡單保護(防君子不防小人,防外行不防內(nèi)行)澜术,就不解釋了艺蝴。

??? (參考:https://blog.csdn.net/waf1314/article/details/5107400

?

5.?BASE64的誤用

BASE64不能用于信息加密!很容易破解鸟废!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末猜敢,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子盒延,更是在濱河造成了極大的恐慌缩擂,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件兰英,死亡現(xiàn)場離奇詭異撇叁,居然都是意外死亡供鸠,警方通過查閱死者的電腦和手機畦贸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人薄坏,你說我怎么就攤上這事趋厉。” “怎么了胶坠?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵君账,是天一觀的道長。 經(jīng)常有香客問我沈善,道長乡数,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任闻牡,我火速辦了婚禮净赴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘罩润。我一直安慰自己玖翅,他們只是感情好,可當我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布割以。 她就那樣靜靜地躺著金度,像睡著了一般。 火紅的嫁衣襯著肌膚如雪严沥。 梳的紋絲不亂的頭發(fā)上猜极,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天,我揣著相機與錄音消玄,去河邊找鬼魔吐。 笑死,一個胖子當著我的面吹牛莱找,可吹牛的內(nèi)容都是我干的酬姆。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼奥溺,長吁一口氣:“原來是場噩夢啊……” “哼辞色!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起浮定,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤相满,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后桦卒,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體立美,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年方灾,在試婚紗的時候發(fā)現(xiàn)自己被綠了建蹄。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片碌更。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖洞慎,靈堂內(nèi)的尸體忽然破棺而出痛单,到底是詐尸還是另有隱情,我是刑警寧澤劲腿,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布旭绒,位于F島的核電站,受9級特大地震影響焦人,放射性物質(zhì)發(fā)生泄漏挥吵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一花椭、第九天 我趴在偏房一處隱蔽的房頂上張望蔫劣。 院中可真熱鬧,春花似錦个从、人聲如沸脉幢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嫌松。三九已至,卻和暖如春奕污,著一層夾襖步出監(jiān)牢的瞬間萎羔,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工碳默, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留贾陷,地道東北人。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓嘱根,卻偏偏與公主長得像髓废,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子该抒,可洞房花燭夜當晚...
    茶點故事閱讀 45,691評論 2 361

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

  • 每個文本編輯器都有默認的編碼方式(比如 UTF-8 編碼)慌洪,當我們保存文檔的時候,可以選擇編碼方式凑保,如果沒有特意選...
    _于曼麗_閱讀 1,531評論 0 1
  • 字符是用戶可以讀寫的最小單位欧引。計算機所能支持的字符組成的集合频伤,就叫做字符集。字符集通常以二維表的形式存在芝此。二維表的...
    劉惜有閱讀 8,131評論 2 14
  • 概述 首先憋肖,我們先來說下什么是Base64編碼因痛,然后再來學習下Java中Base64編碼的使用。 歷史 ??Bas...
    騎著烏龜去看海閱讀 8,277評論 5 3
  • 擺脫網(wǎng)線瞬哼,用wifi無線連接 通過網(wǎng)線登陸SSH后,可以設(shè)置wifi連接租副,擺脫網(wǎng)線坐慰。 以下所以命令如提示權(quán)限不夠時...
    PageWong閱讀 1,450評論 0 4
  • 不是誰來強迫“童蒙”學習结胀,因為每個人都有求知的欲望,求學是人類的本能需求责循≡愀郏《論語》上講“不憤不啟,不悱不發(fā)”就指出...
    行知樂閱讀 494評論 0 1