Base 64

【Base64】

-base64的編碼都是按字符串長(zhǎng)度,以每3個(gè)8bit的字符為一組,

-然后針對(duì)每組,首先獲取每個(gè)字符的ASCII編碼,

-然后將ASCII編碼轉(zhuǎn)換成8bit的二進(jìn)制,得到一組3*8=24bit的字節(jié)

-然后再將這24bit劃分為4個(gè)6bit的字節(jié),并在每個(gè)6bit的字節(jié)前面都填兩個(gè)高位0,得到4個(gè)8bit的字節(jié)

-然后將這4個(gè)8bit的字節(jié)轉(zhuǎn)換成10進(jìn)制,對(duì)照Base64編碼表 (下表),得到對(duì)應(yīng)編碼后的字符。

(注:1. 要求被編碼字符是8bit的,所以須在ASCII編碼范圍內(nèi),\u0000-\u00ff,中文就不行。

2. 如果被編碼字符長(zhǎng)度不是3的倍數(shù)的時(shí)候,則都用0代替,對(duì)應(yīng)的輸出字符為=)


比如舉下面2個(gè)例子:

a) 字符長(zhǎng)度為能被3整除時(shí):比如“Tom” :

? ? ? ? ? ? ? ? ?T ? ? ? ? ? ? ? ? ? ? ?o ? ? ? ? ? ? ? ? ? ?m

ASCII: ? ? 84 ? ? ? ? ? ? ? ? ? 111 ? ? ? ? ? ? ? 109

8bit字節(jié):01010100 ? 01101111 ? 01101101

6bit字節(jié):010101 ? 000110 ? 111101 ? 101101

十進(jìn)制: ? ? ?21 ? ? ? ? ? ? 6 ? ? ? ? ? ? ?61 ? ? ? ? ? ?45

對(duì)應(yīng)編碼: ? ?V ? ? ? ? ? ? ?G ? ? ? ? ? ? ?9 ? ? ? ? ? ? ? t

所以,btoa('Tom') = VG9t


b) 字符串長(zhǎng)度不能被3整除時(shí),比如“Lucy”:

? ? ? ? ? ? ? ? L ? ? ? ? ? ? ? ? ?u ? ? ? ? ? ? ? ? ?c ? ? ? ? ? ? ? ? ?y

ASCII: ? ?76 ? ? ? ? ? ? ? 117 ? ? ? ? ? ? ? 99 ? ? ? ? ? ? ?121

8bit字節(jié):01001100 ?01110101 ?01100011 ?01111001 ?00000000 ?00000000 ? (必須要用0把字節(jié)數(shù)湊成3的倍數(shù))

6bit字節(jié):010011 ? 000111 ? 010101 ? 100011 ? 011110 ? 010000 ? 000000 ? 000000

十進(jìn)制: ? ? ?19 ? ? ? ? ? ? ?7 ? ? ? ? ? ? ?21 ? ? ? ? ? ? 35 ? ? ? ? ? 30 ? ? ? ? ? ?16 ? ? ? ? ?(異常) ? ? (異常)

對(duì)應(yīng)編碼: ? ?T ? ? ? ? ? ? ?H ? ? ? ? ? ? ? V ? ? ? ? ? ? ? ?j? ? ? ? ? ? ? e ? ? ? ? ? ? ? Q ? ? ? ? ? ? = ? ? ? ? ? ? ?=

所以,btoa('Lucy') = THVjeQ==


由于Lucy只有4個(gè)字母,所以按3個(gè)一組的話,第二組還有兩個(gè)空位,所以需要用0來(lái)補(bǔ)齊。這里就需要注意,因?yàn)槭切枰a(bǔ)齊而出現(xiàn)的0,所以轉(zhuǎn)化成十進(jìn)制的時(shí)候就不能按常規(guī)用base64編碼表來(lái)對(duì)應(yīng),所以不是a, 可以理解成為一種特殊的“異?!保幋a應(yīng)該對(duì)應(yīng)“=”。

有了上面的理論,那我們實(shí)現(xiàn)一個(gè)base64編碼就容易了。




最后編輯于
?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 編碼問(wèn)題一直困擾著開(kāi)發(fā)人員,尤其在 Java 中更加明顯,因?yàn)?Java 是跨平臺(tái)語(yǔ)言,不同平臺(tái)之間編碼之間的切換...
    x360閱讀 2,582評(píng)論 1 20
  • 一.base-64 base64 編碼是現(xiàn)代密碼學(xué)的基礎(chǔ) 基本原理:原本是 8個(gè)bit 一組表示數(shù)據(jù),改為 6個(gè)b...
    Albert_Li99閱讀 1,657評(píng)論 1 18
  • 問(wèn)題場(chǎng)景 公司項(xiàng)目需要加密傳輸,使用 AES 進(jìn)行加密,加密后轉(zhuǎn)為 base64 字符串進(jìn)行網(wǎng)絡(luò)傳輸。結(jié)果發(fā)現(xiàn)接收...
    meteor199閱讀 5,197評(píng)論 0 0
  • 我們排隊(duì)站在時(shí)光滑梯上.從這上面滑下去,我們就回到了童年. 站在滑梯上往下看,只有一片朦朧.我看不到我的過(guò)去. 隊(duì)...
    Nehz閱讀 275評(píng)論 0 2
  • “實(shí)在是傷腦筋啊”。嘴角叼著煙卷,身體軟綿綿縮在沙發(fā)里,一邊吞云吐霧,一邊唉聲嘆氣的家伙,是不久前認(rèn)識(shí)的新朋友—L...
    鼓聲的春樹(shù)閱讀 639評(píng)論 0 51

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