您好,登錄后才能下訂單哦!
這篇文章主要講解了“Base64編碼的原理是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Base64編碼的原理是什么”吧!
Base64是一種基于64個可打印字符來表示二進制數據的表示方法。由于 2的6次方是64,所以每6個比特為一個單元,對應某個可打印字符。3個字節有24個比特,對應于4個Base64單元,即3個字節可由4個可打印字符來表示。它可用來作為電子郵件的傳輸編碼。在Base64中的可打印字符包括字母A-Z、a-z、數字0-9,這樣共有62個字符,此外兩個可打印符號在不同的系統中而不同。在MIME格式中,剩余兩個字符是加號+和斜杠/,等號=用來作為后綴用途。UTF-7是一個修改版Base64,主要的區別在于不用等號=補余,因為該字符通常需要大量的轉譯。在IRCu等軟件所使用的P10 IRC服務器間協議中,將+/改成了[]。Base64編碼可用于在HTTP環境下傳遞,不在末尾填充=號,并將標準Base64中的+和/分別改成了-和_。
base64編碼后的數據比原始數據略長,比原來長1/3。為什么會長1/3?我們學習下原理,之后工作中base64就再也不會擋道了。轉換的時候,將3字節的數據,先后放入一個24位的緩沖區中,先來的字節占高位。數據不足3字節的話,于緩沖器中剩下的比特用0補足。每次取出6比特,按照其值選擇ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/中的字符作為編碼后的輸出,直到全部輸入數據轉換完成。若原數據長度不是3的倍數時且剩下1個輸入數據,則在編碼結果后加2個=;若剩下2個輸入數據,則在編碼結果后加1個=。換句話,本來3個字節,base64經過自己的編碼成為4個字節。比原理多了1/3。來,舉個例子
文本 | h | e | l | |
---|---|---|---|---|
ascii 編碼 | 104 | 101 | 108 | |
二進制 | 01101000 | 01100101 | 01101100 | |
base64 6位 | 011010 | 00 0110 | 010101 | 101100 |
base64 10進制編號 | 26 | 6 | 21 | 44 |
base64 結果 | a | G | V | s |
hel的base64編碼結果就是aGVs
base64碼表
base64的應用特別廣泛,個人在開發中遇到最多的兩個方面,第一個是URL的base64,另一個是圖片base64。先說第一種,已經有urlencode了,為什么還需要base64 的URL。各有用途。urlencode是將-_. 之外的所有非字母數字字符都將被替換成百分號(%)后跟兩位十六進制數,空格則編碼為加號(+)。如果一個URL里面有+ 有空格,是不是urlencode就搞不定,使用base64就會迎刃而解。帶來的代價就URL比原理長了1/3
圖片編碼的問題,經常跟客戶端開發的時候,客戶端使用二進制流上傳圖片的時候比較復雜,就可以使用base64將圖片的二進制編碼轉成base64,服務端接到數據之后再basedecode之后就是圖片的二進制流。特別方便,帶來的結果就是,傳輸的數據多了1/3。
根據RFC 822規定,每76個字符,還需要加上一個回車換行。出問題的一般都是822規定,有的語言,對base64decode的時候,發現有換行符就decode失敗了,究其原因基本都市822規定,有很多換行,decode的時候解碼失敗,知道原因了就特別簡單,將換行符\r|\r\n 替換成 空,再base64decode就可以了。
感謝各位的閱讀,以上就是“Base64編碼的原理是什么”的內容了,經過本文的學習后,相信大家對Base64編碼的原理是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。