讓你完全理解base64是怎麼回事

2021-07-25 12:07:46 字數 1765 閱讀 8400

http將base64-編碼用於基本認證和摘要認證,在幾種http擴充套件中也使用了該編碼。

base-64編碼可以將任意一組位元組轉換為較長的常見文字字串行,從而可以合法地作為首部字段值。base-64編碼將使用者輸入或二進位制資料,打包成一種安全格式,將其作為http首部欄位的值傳送出去,而無須擔心其中包含會破壞http分析程式的冒號、換行符或二進位制值。base-64編碼是作為mime多**電子郵件標準的一部分開發的,這樣mime就可以在不同的合法電子郵件閘道器之間傳輸富文字和任意的二進位制資料裡。base-64編碼與將二進位制資料文字化表示的uuencode和binhex標準在本質上類似,但空間效率更高。

base-64編碼將乙個8位子節序列拆散為6位的片段,並為每個6位的片短分配乙個字元,這個字元是base-64字母表中的64個字元之一。這64個輸出字元都是很常見的,可以安全地放在http首部欄位中。這64個字元中包括大小寫字母、數字、+和/,還是用裡特殊字元=

注意:由於base64編碼用了8位字元來表示資訊中的6個位,所以base64編碼字串大約比原始值擴大了33%。

此處輸入的描述

下面是乙個簡單的base64編碼例項。在這裡,三個字元組成的輸入值「ow!」是base64編碼的,得到的是4個字元的base64編碼值「t3ch」。它是按以下方式工作的。

// 現在將字串"ow!"轉換為base64編碼值

var str = 'ow!';

// 或去字串的二進位製碼

var binary = ;

for (var i = 0; i < str.length; i++)

// 1 把字串按照6位分開,進行分割,得到['010011','110111','011100','1000001']

// 2 將每乙個轉換為十進位制分別對於[19,55,28,33];

// 3 將每一位數字分別對於上面提供的base64對應表,得到對應的編碼,分別對於 t 3 c h

// 4 最後就會得到base64編碼t3ch

console.log('字元"ow!"最後得到的base64編碼為"t3ch"');

base64編碼收到乙個8位位元組序列,將這個二進位制序列流劃分成6位的塊。二進位制序列有時不能正好平均地分為6位的塊,在這種情況下,就在序列末尾填充零位,使二進位制序列的長度成為24的倍數(6和8的最小公倍數)。

對已填充的二進位制進行編碼時,任何完全填充(不包括原始陣列中的位)的6位組都有特殊的第65個符號"="表示。如果6位組是部分填充的,就將填充位設定為0.

下面會寫乙個填充例項。初始輸入字串為"a:a"為3個位元組(24位)。24是6和8的倍數,因此按照上面給出的例子計算。無需填充就會得到base64編碼為"ytph"。

然而,再增加乙個字元,輸入字串變為"a:aa",轉換為二進位制就會有32位長。而6和8的下乙個公倍數為48.因此要新增16為的填充碼。填充的前4位是與資料位混合在一起的。得到的6位組01***x,會被當作010000、十進位制中的16,或者base64編碼的q來處理。剩下的兩個6位組都是填充碼,用=來表示。

最近的瀏覽器提供了自動生成base64的方法atobbtob

btoa('a:a')

// => "ytph"

atob('ytph')

// => "a:a"

希望此文可以幫助你完全理解base-64。

**:

讓你完全理解base64是怎麼回事

http將base64 編碼用於基本認證和摘要認證,在幾種http擴充套件中也使用了該編碼。base 64編碼可以將任意一組位元組轉換為較長的常見文字字串行,從而可以合法地作為首部字段值。base 64編碼將使用者輸入或二進位制資料,打包成一種安全格式,將其作為http首部欄位的值傳送出去,而無須擔...

Base64 你真的理解嗎

base64模組是用來作base64編碼解碼,常用於小型資料的傳輸。編碼後的資料是乙個字串,其包括a z a z 0 9 共64個字元,即可用6個位元組表示,寫出數值就是0 63.故三個位元組編碼的話就變成了4個位元組,如果資料位元組數不是3的倍數,就不能精確地劃分6位的塊,此時需要在原資料後新增1...

base64編碼是怎麼工作的

1 為什麼需要base64?ascii碼一共規定了128個字元的編碼,這128個符號,範圍在 0,127 之間.其中,0,31 及127,33個屬於不可列印的控制字元.在電子郵件傳輸資訊時,有些郵件閘道器會把 0,31 這些控制字元給悄悄清除.還有的早期程式,收到 128,255 之間的國際字元時,...