摘要:什么是是網(wǎng)絡(luò)上最常見的用于傳輸字節(jié)碼的編碼方式之一,就是一種基于個可打印字符來表示二進制數(shù)據(jù)的方法。然而直接轉(zhuǎn)換是不行的。一般用于在協(xié)議下傳輸二進制數(shù)據(jù)。剩下的使用替代。這就是的編碼過程。不能用于加密數(shù)據(jù),即使使用私有的索引表也是不安全的。
什么是base64
Base64是網(wǎng)絡(luò)上最常見的用于傳輸8Bit字節(jié)碼的編碼方式之一,Base64就是一種基于64個可打印字符來表示二進制數(shù)據(jù)的方法。
為什么會有base64由于HTTP協(xié)議是文本協(xié)議,所以在HTTP協(xié)議下傳輸二進制數(shù)據(jù)需要將二進制數(shù)據(jù)轉(zhuǎn)換為字符數(shù)據(jù)。然而直接轉(zhuǎn)換是不行的。因為網(wǎng)絡(luò)傳輸只能傳輸可打印字符。
問: 什么是“可打印字符”呢?
答: 在ASCII碼中規(guī)定,0~31、128這33個字符屬于控制字符,32~127這95個字符屬于可打印字符,也就是說網(wǎng)絡(luò)傳輸只能傳輸這95個字符,不在這個范圍內(nèi)的字符無法傳輸。
問: 那么該怎么才能傳輸其他字符呢?
答: 其中一種方式就是使用Base64。Base64一般用于在HTTP協(xié)議下傳輸二進制數(shù)據(jù)。
Base64的索引與對應(yīng)字符的關(guān)系如下表所示:
也就是說,如果將索引轉(zhuǎn)換為對應(yīng)的二進制數(shù)據(jù)的話需要至多6個Bit(2^6=64)。然而ASCII碼需要8個Bit來表示,那么怎么使用6個Bit來表示8個Bit的數(shù)據(jù)呢?6個Bit當(dāng)然不能存儲8個Bit的數(shù)據(jù),但是4*6個Bit可以存儲3*8個Bit的數(shù)據(jù)啊!
可以看到“Son”通過Base64編碼轉(zhuǎn)換成了“U29u”。這是剛剛好的情況,3個ASCII字符剛好轉(zhuǎn)換成對應(yīng)的4個Base64字符。但是,當(dāng)需要轉(zhuǎn)換的字符數(shù)不是3的倍數(shù)的情況下該怎么辦呢?Base64規(guī)定,當(dāng)需要轉(zhuǎn)換的字符不是3的倍數(shù)時,一律采用補0的方式湊足3的倍數(shù),具體如下表所示:
每6個Bit為一組,第一組轉(zhuǎn)換后為字符“U”,第二組末尾補4個0轉(zhuǎn)換后為字符“w”。剩下的使用“=”替代。即字符“S”通過Base64編碼后為“Uw==”。這就是Base64的編碼過程。
HTML規(guī)范關(guān)于base64有哪些API好了,原理懂了,那么如果要進行base64編碼,我們該怎么做呢?自己擼一個方法?找一個庫?都行,但是HTML規(guī)范中已經(jīng)規(guī)定了base64轉(zhuǎn)換的API,window對象上可以訪問到base64編碼和解碼的方法,直接調(diào)用即可。
window.atob() // 對base64編碼過的字符串進行解碼
window.btoa() // 對ASCII編碼的字符串進行base64編碼(不支持漢字,漢字可通過URIencode預(yù)處理后再編碼)
前端將較小的icon編碼為base64直接在文檔中加載,減少http請求
電子郵件傳輸二進制文件時,通常用base64編碼后再傳
注意:
base64編碼后的數(shù)據(jù)量是要比編碼前大的,所以base64不能用于減少數(shù)據(jù)量。
base64不能用于加密數(shù)據(jù),即使使用私有的索引表也是不安全的。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/97732.html
摘要:注意點如果所示,上面說到的編碼解碼方法并不支持中文,因為它們只支持編碼。轉(zhuǎn)換編碼中文進行轉(zhuǎn)碼之后在編碼。最優(yōu)方案在某些情況下,用了上面的方法也會出現(xiàn)中文亂碼的情況,如獲取到的音樂歌詞解析出來的歌詞等。 為什么要編碼 簡單粗暴的解釋就是為了數(shù)據(jù)的安全性。 編碼/解碼常用方法(僅針對Base64) 編碼 我們一般使用 window.btoa() 對原始數(shù)據(jù)進行編碼。 解碼 我們一般使用 w...
摘要:為的值,有可能不是,而是一個字符除了和這幾個值會返回,對于其他的數(shù)值都會返回?zé)o法改變字符串之中的單個字符。屬性返回字符串的長度,該屬性也是無法改變的。由于對象本身并沒有屬性,但是運算符會返回,因為這個屬性是繼承的。 null, undefined null 和 undefined null 是一個表示為空的對象,轉(zhuǎn)為數(shù)值時為0;undefined是一個表示此處無定義的原始值,轉(zhuǎn)為數(shù)值時...
摘要:前言中提供的文件在前端中有著豐富的應(yīng)用,上傳下載讀取內(nèi)容等在日常的交互中很常見。構(gòu)造函數(shù)中的第一個參數(shù)是一個數(shù)組,可以存放對象對象對象和字符串。通過構(gòu)造函數(shù)創(chuàng)建一個對象該對象有以下方法中斷讀取操作。 前言 HTML5 中提供的文件API在前端中有著豐富的應(yīng)用,上傳、下載、讀取內(nèi)容等在日常的交互中很常見。而且在各個瀏覽器的兼容也比較好,包括移動端,除了 IE 只支持 IE10 以上的版本...
摘要:最近接手了一個項目接觸到一些對文件操作的業(yè)務(wù)所以在這邊整理一下日常用到的處理方式當(dāng)學(xué)習(xí)筆記吧有不對的地方歡迎指正哈首先我們來看一下這個萬能的對象就如同它的名字一樣就是個文件讀取器之所以說它是個萬能的對象是因為它可以讀取任意格式的內(nèi)容最近我嘗 最近接手了一個項目,接觸到一些對文件操作的業(yè)務(wù).所以在這邊整理一下日常用到的處理方式,當(dāng)學(xué)習(xí)筆記吧,有不對的地方,歡迎指正哈 FileReader...
閱讀 1171·2021-11-22 13:52
閱讀 1030·2019-08-30 15:44
閱讀 642·2019-08-30 15:43
閱讀 2505·2019-08-30 12:52
閱讀 3555·2019-08-29 16:16
閱讀 726·2019-08-29 13:05
閱讀 3015·2019-08-26 18:36
閱讀 2108·2019-08-26 13:46