從Base64編碼的What/Why/Where講起

一、什么是Base64編碼?

Base64是網(wǎng)絡(luò)上最常見的用于傳輸8Bit字節(jié)碼的編碼方式之一,Base64就是一種基于64個(gè)可打印字符來表示二進(jìn)制數(shù)據(jù)的方法。

按照RFC2045的定義,Base64被定義為:Base64內(nèi)容傳送編碼被設(shè)計(jì)用來把任意序列的8位字節(jié)描述為一種不易被人直接識(shí)別的形式。(The Base64 Content-Transfer-Encoding is designed to represent arbitrary sequences of octets in a form that need not be humanly readable.)

二、為什么要使用Base64編碼?

Base64 不是加密算法,它主要的用途是把一些二進(jìn)制數(shù)轉(zhuǎn)成普通字符用于網(wǎng)絡(luò)傳輸。由于一些二進(jìn)制字符在傳輸協(xié)議中屬于控制字符,不能直接傳送,需要轉(zhuǎn)換一下。

三、在哪兒用到了Base64編碼?

例1、電子郵件MIME協(xié)議的傳送編碼域,?Base64是非英語國(guó)家最常用的編碼方式。

例2、在Java持久化框架Hibernate中,就采用Base64來將一個(gè)較長(zhǎng)的唯一標(biāo)識(shí)符(128位的UUID)編碼為一個(gè)字符串,用作HTTP表單和HTTP GET URL中的參數(shù)。

例3、迅雷的“專用地址”也是用Base64"加密"的。

第一步、在地址的前后分別添加AA和ZZ;

第二步、對(duì)新的字符串進(jìn)行Base64編碼。

對(duì)應(yīng)的PHP代碼段如下:

if($button=="普通地址->迅雷地址")echo"thunder://".base64_encode("AA".$txt1."ZZ");

例4、垃圾郵件的傳播者用Base64來避開反垃圾郵件工具的掃描,因?yàn)槟切┕ぞ咄ǔ6疾粫?huì)翻譯Base64的訊息。

四、Base64編碼包含哪些字符?

? ? ? “無圖無真相”,跳過原理部分,我們一起來看一下Base64的字符表。

? ? ? ?感覺是不是有些似曾相識(shí)?

Base64 字符表

? ? ? ? 計(jì)算機(jī)基礎(chǔ)知識(shí)通常會(huì)從二進(jìn)制,八進(jìn)制,十六進(jìn)制講起,然后介紹ASCII碼,ASCII碼包含128個(gè)字符,而Base64編碼恰好是它的一半——64個(gè)字符。如上圖所示,標(biāo)準(zhǔn)Base64的字符包括:26個(gè)大寫字母,26小寫字母,10個(gè)阿拉伯?dāng)?shù)字,以及2個(gè)運(yùn)算符號(hào)+和/。

? ? ? ? ?標(biāo)準(zhǔn)的Base64并不適合直接放在URL里傳輸,因?yàn)閁RL編碼器會(huì)把標(biāo)準(zhǔn)Base64中的“/”和“+”字符變?yōu)樾稳纭?XX”的形式,而這些“%”號(hào)在存入數(shù)據(jù)庫時(shí)還需要再進(jìn)行轉(zhuǎn)換,因?yàn)锳NSI SQL中已將“%”號(hào)用作通配符。為解決此問題,可采用一種用于URL的改進(jìn)Base64編碼,它在末尾填充'='號(hào),并將標(biāo)準(zhǔn)Base64中的“+”和“/”分別改成了“-”和“_”,這樣就免去了在URL編解碼和數(shù)據(jù)庫存儲(chǔ)時(shí)所要作的轉(zhuǎn)換,避免了編碼信息長(zhǎng)度在此過程中的增加,并統(tǒng)一了數(shù)據(jù)庫、表單等處對(duì)象標(biāo)識(shí)符的格式。

五、有沒有Base64編碼的示例?

下面就“舉一個(gè)栗子”:

1、encodeImgageToBase64()將URL指向的圖片,轉(zhuǎn)化為字節(jié)數(shù)組字符串,并對(duì)其進(jìn)行Base64編碼處理,返回編碼后的字符串。

2、打印出編碼后的Base64字符串, 并將編碼轉(zhuǎn)為圖片另存到本地。

知豬俠.jpg的Base64編碼
Java代碼示例
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 每個(gè)文本編輯器都有默認(rèn)的編碼方式(比如 UTF-8 編碼),當(dāng)我們保存文檔的時(shí)候,可以選擇編碼方式,如果沒有特意選...
    _于曼麗_閱讀 1,803評(píng)論 0 1
  • 原文在這里:各種字符集和編碼詳解 在軟件的編碼和實(shí)現(xiàn)中,我們可能會(huì)碰到個(gè) 一個(gè)比較頭疼的問題--編碼,不同字符間的...
    舌尖上的大胖閱讀 1,983評(píng)論 0 2
  • 〇、引(“聯(lián)通事件”) 做一個(gè)試驗(yàn)。 新建一個(gè)文本文件,然后用記事本打開,輸入“聯(lián)通”,保存,關(guān)閉。 再次用記事本...
    白花蛇草可樂閱讀 2,993評(píng)論 0 1
  • 桔梗(ききょう),山野之中自生自滅的野花,花語“永恒的愛與無望的愛”。 這篇文,給一個(gè)叫桔梗的女人。 《犬夜叉》日...
    yierjie閱讀 1,346評(píng)論 6 7
  • 許多年過去了,當(dāng)時(shí)在學(xué)校的畫面還是清晰的在我腦海里,清晰到每一個(gè)細(xì)節(jié)。我們一定是把那一種微弱的感覺當(dāng)做是愛了吧,覺...
    WtingTingTingti閱讀 307評(píng)論 0 0

友情鏈接更多精彩內(nèi)容