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