成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

wangzy2019 / 2520人閱讀

摘要:它是按以下方式工作的。對(duì)已填充的二進(jìn)制進(jìn)行編碼時(shí),任何完全填充不包括原始數(shù)組中的位的位組都有特殊的第個(gè)符號(hào)表示。剩下的兩個(gè)位組都是填充碼,用來(lái)表示。最新的瀏覽器提供了自動(dòng)生成的方法和希望此文可以幫助你完全理解。

HTTP將BASE64-編碼用于基本認(rèn)證和摘要認(rèn)證,在幾種HTTP擴(kuò)展中也使用了該編碼。

Base-64編碼保證了二進(jìn)制數(shù)據(jù)的安全

Base-64編碼可以將任意一組字節(jié)轉(zhuǎn)換為較長(zhǎng)的常見文本字符序列,從而可以合法地作為首部字段值。Base-64編碼將用戶輸入或二進(jìn)制數(shù)據(jù),打包成一種安全格式,將其作為HTTP首部字段的值發(fā)送出去,而無(wú)須擔(dān)心其中包含會(huì)破壞HTTP分析程序的冒號(hào)、換行符或二進(jìn)制值。
Base-64編碼是作為MIME多媒體電子郵件標(biāo)準(zhǔn)的一部分開發(fā)的,這樣MIME就可以在不同的合法電子郵件網(wǎng)關(guān)之間傳輸富文本和任意的二進(jìn)制數(shù)據(jù)里。Base-64編碼與將二進(jìn)制數(shù)據(jù)文本化表示的uuencode和BinHex標(biāo)準(zhǔn)在本質(zhì)上類似,但空間效率更高。

8位到16位

Base-64編碼將一個(gè)8位子節(jié)序列拆散為6位的片段,并為每個(gè)6位的片短分配一個(gè)字符,這個(gè)字符是Base-64字母表中的64個(gè)字符之一。這64個(gè)輸出字符都是很常見的,可以安全地放在HTTP首部字段中。這64個(gè)字符中包括大小寫字母、數(shù)字、+和/,還是用里特殊字符=。
注意:由于base64編碼用了8位字符來(lái)表示信息中的6個(gè)位,所以base64編碼字符串大約比原始值擴(kuò)大了33%。
此處輸入圖片的描述

下面是一個(gè)簡(jiǎn)單的base64編碼實(shí)例。在這里,三個(gè)字符組成的輸入值“Ow!”是base64編碼的,得到的是4個(gè)字符的base64編碼值“T3ch”。它是按以下方式工作的。

(1) 字符串"Ow!"被拆分成3個(gè)8位的字節(jié)(0x4F、0x77、0x21)。

(2) 這3個(gè)字節(jié)構(gòu)成了一個(gè)24為的二進(jìn)制01001111 01110111 00100001。

(3) 這些為被劃分為一些6位的序列010011、110111、011100、1000001.

(4) 每個(gè)6位值都表示了從0~63之間的數(shù)字,對(duì)應(yīng)base64字母表中的64個(gè)字符之一。得到的base64編碼字符串是4個(gè)字符的字符串“T3ch”。然后就可以通過(guò)線路將這個(gè)字符串作為“安全的”8位字符傳送出去,因?yàn)橹挥昧艘恍┮浦残宰詈玫淖址?字母、數(shù)字等)。

// 現(xiàn)在將字符串"Ow!"轉(zhuǎn)換為base64編碼值
var str = "Ow!";
// 或去字符串的二進(jìn)制碼
var binary = [];
for (var i = 0; i < str.length; i++) {
    // 轉(zhuǎn)換為二進(jìn)制表示
    var binStr = str.charCodeAt(i).toString(2);
    // 將得到的二進(jìn)制放入數(shù)組中得到
    // ["1001111","1110111","100001"]
    // 因?yàn)橐粋€(gè)正常的二進(jìn)制字節(jié)都是由8bit組成的,不夠8bit的話不表示.上面得到的都不夠8bit所以前面我們手動(dòng)給補(bǔ)0,就得到了
    // ["01001111","01110111","00100001"]
    binary.push(binStr);
}
        
// 1 把字符串按照6位分開,進(jìn)行分割,得到["010011","110111","011100","1000001"]
// 2 將每一個(gè)轉(zhuǎn)換為十進(jìn)制分別對(duì)于[19,55,28,33];
// 3 將每一位數(shù)字分別對(duì)于上面提供的base64對(duì)應(yīng)表,得到對(duì)應(yīng)的編碼,分別對(duì)于 T 3 c h
// 4 最后就會(huì)得到base64編碼T3ch
console.log("字符"Ow!"最后得到的base64編碼為"T3ch"");
base64填充

base64編碼收到一個(gè)8位字節(jié)序列,將這個(gè)二進(jìn)制序列流劃分成6位的塊。二進(jìn)制序列有時(shí)不能正好平均地分為6位的塊,在這種情況下,就在序列末尾填充零位,使二進(jìn)制序列的長(zhǎng)度成為24的倍數(shù)(6和8的最小公倍數(shù))。
對(duì)已填充的二進(jìn)制進(jìn)行編碼時(shí),任何完全填充(不包括原始數(shù)組中的位)的6位組都有特殊的第65個(gè)符號(hào)"="表示。如果6位組是部分填充的,就將填充位設(shè)置為0.
下面會(huì)寫一個(gè)填充實(shí)例。初始輸入字符串為"a:a"為3個(gè)字節(jié)(24位)。24是6和8的倍數(shù),因此按照上面給出的例子計(jì)算。無(wú)需填充就會(huì)得到base64編碼為"YTph"。
然而,再增加一個(gè)字符,輸入字符串變?yōu)?a:aa",轉(zhuǎn)換為二進(jìn)制就會(huì)有32位長(zhǎng)。而6和8的下一個(gè)公倍數(shù)為48.因此要添加16為的填充碼。填充的前4位是與數(shù)據(jù)位混合在一起的。得到的6位組01xxxx,會(huì)被當(dāng)作010000、十進(jìn)制中的16,或者base64編碼的Q來(lái)處理。剩下的兩個(gè)6位組都是填充碼,用=來(lái)表示。

a:a -- 011000 010011 101001 100001 -- YTph

a:aa -- 011000 010011 101001 100001 011000 01xxxx xxxxxx xxxxxx -- YTphYQ==

a:aaa -- 011000 010011 101001 100001 011000 010110 0001xx xxxxxx -- YTphYWE=

a:aaaa -- 011000 010011 101001 100001 011000 010110 000101 1000001 -- YTphYWFh

最新的瀏覽器提供了自動(dòng)生成base64的方法atobbtob

btoa("a:a")
// => "YTph"
atob("YTph")
// => "a:a"

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

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/78801.html

相關(guān)文章

  • 回眸曾經(jīng)的項(xiàng)目,與第三方支付相關(guān),所帶來(lái)的溝通問題

    摘要:錢可以存儲(chǔ)在自己的余額中,這就相當(dāng)于微信錢包,余額可以提現(xiàn)到銀行卡的中。我們的第三方支付平臺(tái)是連連支付,杭州的一家公司。私鑰怎么加簽每個(gè)公司的加簽方式是不一樣的,支付寶有支付寶的加簽方式,微信有微信的加簽方式。 導(dǎo)讀 筆者在校期間,通過(guò)自學(xué)java。學(xué)校里也開過(guò)這門課,但是,講的都是一些基礎(chǔ),比如java的表達(dá)式、基本類型、自定義類型等等。也都是很基礎(chǔ)的東西,就連lambda表達(dá)式都沒...

    kaka 評(píng)論0 收藏0
  • 該死的IEEE-754浮點(diǎn)數(shù),說(shuō)「約」就「約」,你的底線呢?以JS的名義來(lái)好好查查你

    摘要:而的浮點(diǎn)數(shù)設(shè)置的偏移值是,因?yàn)橹笖?shù)域表現(xiàn)為一個(gè)非負(fù)數(shù),位,所以,實(shí)際的,所以。這是因?yàn)樗鼈冊(cè)谵D(zhuǎn)為二進(jìn)制時(shí)要舍入部分的不同可能造成的不同舍 IEEE 754 表示:你盡管抓狂、罵娘,但你能完全避開我,算我輸。 一、IEEE-754浮點(diǎn)數(shù)捅出的那些婁子 首先我們還是來(lái)看幾個(gè)簡(jiǎn)單的問題,能說(shuō)出每一個(gè)問題的細(xì)節(jié)的話就可以跳過(guò)了,而如果只能泛泛說(shuō)一句因?yàn)镮EEE754浮點(diǎn)數(shù)精度問題,那么下文還是...

    gaosboy 評(píng)論0 收藏0
  • 簡(jiǎn)單易懂的CSS Modules

    摘要:結(jié)果是選手獲勝,名為的元素,最終的值為。而合理的命名約定,的確是組織代碼的有效策略。它們會(huì)再由轉(zhuǎn)換為適當(dāng)?shù)慕M合。雖然本文為了嚴(yán)謹(jǐn),結(jié)果寫了相當(dāng)長(zhǎng)的篇幅,但希望你讀過(guò)之后,還能覺得是簡(jiǎn)單易懂的。 不要誤會(huì),CSS Modules可不是在說(shuō)css模塊化這個(gè)好像在某些地方見過(guò)的詞,它其實(shí)是特指一種近期才出現(xiàn)的技術(shù)手段。 什么技術(shù)手段呢?請(qǐng)待后文說(shuō)明。 層疊樣式表 我們知道,css的全名叫做層...

    chunquedong 評(píng)論0 收藏0
  • 和少婦白潔一起學(xué)JavaScript

    摘要:我們已經(jīng)回答了的構(gòu)造函數(shù)和原型都是誰(shuí)的問題,現(xiàn)在牽扯出來(lái)一個(gè),我們繼續(xù)檢查的構(gòu)造函數(shù)是全局對(duì)象上屬性叫的對(duì)象的原型是個(gè)匿名函數(shù),按照關(guān)于構(gòu)造函數(shù)的約定,它應(yīng)該是構(gòu)造函數(shù)的屬性我們給這個(gè)對(duì)象起個(gè)名字,叫。 我不確定JavaScript語(yǔ)言是否應(yīng)該被稱為Object-Oriented,因?yàn)镺bject Oriented是一組語(yǔ)言特性、編程模式、和設(shè)計(jì)與工程方法的籠統(tǒng)稱謂,沒有一個(gè)詳盡和大家...

    DevTTL 評(píng)論0 收藏0
  • 前端應(yīng)該知道的web登錄

    摘要:客戶端發(fā)起非登錄請(qǐng)求時(shí),服務(wù)端通過(guò)中的找到對(duì)應(yīng)的來(lái)知道此次請(qǐng)求是誰(shuí)發(fā)出的。數(shù)量隨著登錄用戶的增多而增多,存儲(chǔ)會(huì)增加很多。還記得在上家公司做全干工程師的時(shí)候,基本從頁(yè)面寫到運(yùn)維,當(dāng)時(shí)做登錄這塊的時(shí)候,被session、cookie、token各種概念差點(diǎn)整蒙圈了,上網(wǎng)查詢相關(guān)概念,發(fā)現(xiàn)很多人都是類似的疑惑,比如:showImg(https://user-gold-cdn.xitu.io/201...

    NervosNetwork 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<