摘要:它是按以下方式工作的。對已填充的二進制進行編碼時,任何完全填充不包括原始數組中的位的位組都有特殊的第個符號表示。剩下的兩個位組都是填充碼,用來表示。最新的瀏覽器提供了自動生成的方法和希望此文可以幫助你完全理解。
HTTP將BASE64-編碼用于基本認證和摘要認證,在幾種HTTP擴展中也使用了該編碼。
Base-64編碼保證了二進制數據的安全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”。它是按以下方式工作的。
(1) 字符串"Ow!"被拆分成3個8位的字節(0x4F、0x77、0x21)。
(2) 這3個字節構成了一個24為的二進制01001111 01110111 00100001。
(3) 這些為被劃分為一些6位的序列010011、110111、011100、1000001.
(4) 每個6位值都表示了從0~63之間的數字,對應base64字母表中的64個字符之一。得到的base64編碼字符串是4個字符的字符串“T3ch”。然后就可以通過線路將這個字符串作為“安全的”8位字符傳送出去,因為只用了一些移植性最好的字符(字母、數字等)。
// 現在將字符串"Ow!"轉換為base64編碼值 var str = "Ow!"; // 或去字符串的二進制碼 var binary = []; for (var i = 0; i < str.length; i++) { // 轉換為二進制表示 var binStr = str.charCodeAt(i).toString(2); // 將得到的二進制放入數組中得到 // ["1001111","1110111","100001"] // 因為一個正常的二進制字節都是由8bit組成的,不夠8bit的話不表示.上面得到的都不夠8bit所以前面我們手動給補0,就得到了 // ["01001111","01110111","00100001"] binary.push(binStr); } // 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填充
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位組01xxxx,會被當作010000、十進制中的16,或者base64編碼的Q來處理。剩下的兩個6位組都是填充碼,用=來表示。
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
最新的瀏覽器提供了自動生成base64的方法atob和btob
btoa("a:a") // => "YTph" atob("YTph") // => "a:a"
希望此文可以幫助你完全理解BASE-64。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/78801.html
摘要:錢可以存儲在自己的余額中,這就相當于微信錢包,余額可以提現到銀行卡的中。我們的第三方支付平臺是連連支付,杭州的一家公司。私鑰怎么加簽每個公司的加簽方式是不一樣的,支付寶有支付寶的加簽方式,微信有微信的加簽方式。 導讀 筆者在校期間,通過自學java。學校里也開過這門課,但是,講的都是一些基礎,比如java的表達式、基本類型、自定義類型等等。也都是很基礎的東西,就連lambda表達式都沒...
摘要:而的浮點數設置的偏移值是,因為指數域表現為一個非負數,位,所以,實際的,所以。這是因為它們在轉為二進制時要舍入部分的不同可能造成的不同舍 IEEE 754 表示:你盡管抓狂、罵娘,但你能完全避開我,算我輸。 一、IEEE-754浮點數捅出的那些婁子 首先我們還是來看幾個簡單的問題,能說出每一個問題的細節的話就可以跳過了,而如果只能泛泛說一句因為IEEE754浮點數精度問題,那么下文還是...
摘要:結果是選手獲勝,名為的元素,最終的值為。而合理的命名約定,的確是組織代碼的有效策略。它們會再由轉換為適當的組合。雖然本文為了嚴謹,結果寫了相當長的篇幅,但希望你讀過之后,還能覺得是簡單易懂的。 不要誤會,CSS Modules可不是在說css模塊化這個好像在某些地方見過的詞,它其實是特指一種近期才出現的技術手段。 什么技術手段呢?請待后文說明。 層疊樣式表 我們知道,css的全名叫做層...
摘要:我們已經回答了的構造函數和原型都是誰的問題,現在牽扯出來一個,我們繼續檢查的構造函數是全局對象上屬性叫的對象的原型是個匿名函數,按照關于構造函數的約定,它應該是構造函數的屬性我們給這個對象起個名字,叫。 我不確定JavaScript語言是否應該被稱為Object-Oriented,因為Object Oriented是一組語言特性、編程模式、和設計與工程方法的籠統稱謂,沒有一個詳盡和大家...
摘要:客戶端發起非登錄請求時,服務端通過中的找到對應的來知道此次請求是誰發出的。數量隨著登錄用戶的增多而增多,存儲會增加很多。還記得在上家公司做全干工程師的時候,基本從頁面寫到運維,當時做登錄這塊的時候,被session、cookie、token各種概念差點整蒙圈了,上網查詢相關概念,發現很多人都是類似的疑惑,比如:showImg(https://user-gold-cdn.xitu.io/201...
閱讀 3267·2021-11-22 14:44
閱讀 1113·2021-11-16 11:53
閱讀 1264·2021-11-12 10:36
閱讀 699·2021-10-14 09:43
閱讀 3685·2019-08-30 15:55
閱讀 3399·2019-08-30 14:14
閱讀 1734·2019-08-26 18:37
閱讀 3410·2019-08-26 12:12