Base 64 簡(jiǎn)介

Base 64 簡(jiǎn)介

Base 64 是一種基于 64 個(gè)可打印字符表示二進(jìn)制數(shù)據(jù)的表示方法。

由于 2^6 = 64,所以每 6 位為一個(gè)單元,對(duì)應(yīng)一個(gè)可打印字符串全释。4 個(gè)可打印字符(Base 64 單元)則對(duì)應(yīng) 3 字節(jié)(24bit = 8 byte)。

它可以用來(lái)傳輸電子郵件中非 ASCII 碼的字符(早期設(shè)計(jì)目的)误债。

但其有著更重要的意義:

  • 所有的二進(jìn)制文件浸船,都可以因此轉(zhuǎn)化為可打印的文本編碼,使用文本軟件進(jìn)行編輯
  • 能夠?qū)ξ谋具M(jìn)行簡(jiǎn)單的加密

Base 64 常用于一些處理文本數(shù)據(jù)的場(chǎng)合寝蹈,如表示李命、存儲(chǔ)、傳輸一些二進(jìn)制數(shù)據(jù)箫老。(MIME 的電子郵件以及 XML 的一些復(fù)雜數(shù)據(jù)等)

Base 64 轉(zhuǎn)換規(guī)則

以 6 位為一個(gè)單元封字,那么顯然其包括 64 個(gè)字符(大寫字母 A-Z,小寫字母 a-z耍鬓,數(shù)字 0-9阔籽,加號(hào) +,斜杠 / )牲蜀。

傳輸?shù)淖止?jié)數(shù)不一定是3的倍數(shù)笆制,可能最后需要作為后綴的還有一個(gè)等號(hào) = 字符。

轉(zhuǎn)換為 Base 64 后的數(shù)據(jù)比原始數(shù)據(jù)略長(zhǎng)(大約是原來(lái)的 4/3 倍)涣达。

具體規(guī)則如下:

  1. 每 3 個(gè)字節(jié)(Byte)作為一組在辆,一共 24 個(gè)二進(jìn)制位(bit)。
  2. 將 24 個(gè)二進(jìn)制位分成 4 組度苔,每組有 6 個(gè)二進(jìn)制位匆篓。
  3. 每組前面加 2 個(gè) 0x00 ( 8 bit ),擴(kuò)展為 32 個(gè)二進(jìn)制林螃,即 4 個(gè)字節(jié)奕删。
  4. 按照以下表格俺泣,轉(zhuǎn)為對(duì)應(yīng)的符號(hào)疗认,這就是 Base 64 的編碼值。

/*  0 -  7: 000000 - 000111 */   'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
/*  8 - 15: 001000 - 001111 */   'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
/* 16 - 23: 010000 - 010111 */   'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
/* 24 - 31: 011000 - 011111 */   'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
/* 32 - 39: 100000 - 100111 */   'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
/* 40 - 47: 101000 - 101111 */   'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
/* 48 - 55: 110000 - 110111 */   'w', 'x', 'y', 'z', '0', '1', '2', '3',
/* 56 - 63: 111000 - 111111 */   '4', '5', '6', '7', '8', '9', '+', '/'

舉例說(shuō)明伏钠,以文本 Man 說(shuō)明:

文本 M a n
ASCII 編碼 77 97 110

文本 0 7 0 7 0 7
二進(jìn)制位 0 1 0 0 1 1 0 1 0 1 1 0 0 0 0 1 0 1 1 0 1 1 1 0
Base 64 0 5 0 5 0 5 0 5

Base 64 值 19(010011) 22(010110) 5(000101) 46(101110)
Base 64 編碼 T W F u
傳輸 Base 64 值 19(00010011) 22(00010110) 5(00000101) 46(00101110)

傳出的末尾可能會(huì)多出 1 個(gè)或 2 個(gè)字節(jié)的數(shù)據(jù)(3個(gè)字節(jié)才能對(duì)應(yīng) 4 個(gè) Base 64 單元)横漏。

需要用以下方式處理。

文本(1 Byte) A(01000001) 補(bǔ)充的部分(00000000) 補(bǔ)充的部分(00000000)
Base 64 編碼 Q(010000) Q(010000) = (000000) = (000000)

文本(1 Byte) B(01000010) C(01000011) 補(bǔ)充的部分(00000000)
Base 64 編碼 Q(010000) k(100100) M(001100) = (000000)

末尾的 000000 采用 = 符號(hào)

用于 URL 的改進(jìn) Base 64 編碼

URL 傳輸對(duì)于 =熟掂,+缎浇,/ 字符都有其特殊的用意(用于 URL 編解碼和數(shù)據(jù)庫(kù)存儲(chǔ)時(shí)),使用標(biāo)準(zhǔn) Base 64 現(xiàn)在回帶來(lái)轉(zhuǎn)換的麻煩赴肚。

針對(duì) URL 的改進(jìn) Base 64 編碼則是不在末尾填充 = 號(hào)素跺,且把 + 號(hào)改成 -二蓝,/ 號(hào)改成 _

用于正則表達(dá)式的改進(jìn) Base 64 變種

+ 改為 ! (在正則表達(dá)式有特殊含義)

/ 改為 - (在正則表達(dá)式有特殊含義)

還有 *+/ * 改為 _-._ (用作編程語(yǔ)言中的標(biāo)識(shí)符名稱)或 .- (用于 XML 中的Nmtoken)或 _:(用于 XML 中的Name)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末指厌,一起剝皮案震驚了整個(gè)濱河市刊愚,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌踩验,老刑警劉巖鸥诽,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異箕憾,居然都是意外死亡牡借,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門袭异,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)钠龙,“玉大人,你說(shuō)我怎么就攤上這事御铃】∮悖” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵畅买,是天一觀的道長(zhǎng)并闲。 經(jīng)常有香客問(wèn)我,道長(zhǎng)谷羞,這世上最難降的妖魔是什么帝火? 我笑而不...
    開(kāi)封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮湃缎,結(jié)果婚禮上犀填,老公的妹妹穿的比我還像新娘。我一直安慰自己嗓违,他們只是感情好九巡,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著蹂季,像睡著了一般冕广。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上偿洁,一...
    開(kāi)封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天撒汉,我揣著相機(jī)與錄音,去河邊找鬼涕滋。 笑死睬辐,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播溯饵,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼侵俗,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了丰刊?” 一聲冷哼從身側(cè)響起坡慌,我...
    開(kāi)封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎藻三,沒(méi)想到半個(gè)月后洪橘,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡棵帽,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年熄求,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逗概。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡弟晚,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出逾苫,到底是詐尸還是另有隱情卿城,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布铅搓,位于F島的核電站瑟押,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏星掰。R本人自食惡果不足惜多望,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望氢烘。 院中可真熱鬧怀偷,春花似錦、人聲如沸播玖。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蜀踏。三九已至维蒙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間脓斩,已是汗流浹背木西。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工畴栖, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留随静,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像燎猛,于是被迫代替她去往敵國(guó)和親恋捆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

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

  • 使用excel處理數(shù)據(jù)的時(shí)候會(huì)遇到這樣的復(fù)雜情況重绷,直接轉(zhuǎn)換成xml語(yǔ)句遇到問(wèn)題沸停,于是打算轉(zhuǎn)換成sql語(yǔ)句這里用的是...
    李2牛閱讀 2,484評(píng)論 0 0
  • 1,有的時(shí)候我坐在床邊看書或者玩手機(jī)昭卓,雙腳自然的垂在地上愤钾。蛋撻就從床底伸出軟軟的小舌頭舔我的腳,把我弄得癢癢的很想...
    蓮喵喵閱讀 196評(píng)論 0 0
  • 梨花煙雨清明候醒,萬(wàn)物逢春能颁,離人千里訴相思,訴不盡心中惆悵倒淫; 翠柳青山共賞伙菊,百花相迎,伊人癡酒醉清風(fēng)敌土,醉不出滿腹情愁镜硕。
    不灬良人閱讀 221評(píng)論 1 1
  • 內(nèi)訓(xùn)師如何提升備課效率 1 為什么 1.1 現(xiàn)狀 1.1.1 內(nèi)訓(xùn)師備課效率低,影響培訓(xùn)績(jī)效返干。 第三季度時(shí)兴枯,公司的...
    無(wú)憂俠閱讀 112評(píng)論 0 0