Base64 編碼解碼原理
Base64編碼,是我們程式開發中經常使用到的編碼方法。它是一種基於用64個可列印字元來表示二進位制資料的表示方法。它通常用作儲存、傳輸一些二進位制資料編碼方法!也是MIME(多用途網際網路郵件擴充套件,主要用作電子郵件標準)中一種可列印字元表示二進位制資料的常見編碼方法!它其實只是定義用可列印字元傳輸內容一種方法,並不會產生新的字符集!有時候,我們學習轉換的思路後,我們其實也可以結合自己的實際需要,構造一些自己介面定義編碼方式。好了,我們一起看看,它的轉換思路吧!
Base64實現轉換原理
它是用64個可列印字元表示二進位制所有資料方法。由於2的6次方等於64,所以可以用每6個位元為一個單元,對應某個可列印字元。我們知道三個位元組有24個位元,就可以剛好對應於4個Base64單元,即3個位元組需要用4個Base64的可列印字元來表示。在Base64中的可列印字元包括字母A-Z、a-z、數字0-9 ,這樣共有62個字元,此外兩個可列印符號在不同的系統中一般有所不同。但是,我們經常所說的Base64另外2個字元是:“+/”。這64個字元,所對應表如下。
轉換的時候,將三個byte的資料,先後放入一個24bit的緩衝區中,先來的byte佔高位。資料不足3byte的話,於緩衝區中剩下的bit用0補足。然後,每次取出6個bit,按照其值選擇
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
中的字元作為編碼後的輸出。不斷進行,直到全部輸入資料轉換完成。
如果最後剩下兩個輸入資料,在編碼結果後加1個“=”;如果最後剩下一個輸入資料,編碼結果後加2個“=”;如果沒有剩下任何資料,就什麼都不要加,這樣才可以保證資料還原的正確性。
編碼後的資料比原始資料略長,為原來的4/3。無論什麼樣的字元都會全部被編碼,因此不像Quoted-printable 編碼,還保留部分可列印字元。所以,它的可讀性不如Quoted-printable編碼!
M的Ascii碼是77,前六位對應值為19,對應base64字元是T,如此類推。其它字元編碼就可以自動轉換得到!我們看看另外不是剛好是3個位元組的情況!
相關文章
- base64 編碼原理
- base64編碼原理和函式函式
- 用JS進行Base64編碼、解碼JS
- base64 編碼
- Base64編碼
- Base64編碼知識詳解
- Rust中字串的base64編碼與解碼Rust字串
- URL編碼與解碼原理
- 關於base64編碼的原理及實現
- Notepad++外掛Base64編解碼
- 深入瞭解圖片Base64編碼
- 計算機編碼規則之:Base64編碼計算機
- JavaScript base64解碼程式碼JavaScript
- Java 8中的Base64編碼和解碼Java
- 【Java小工匠】密碼學--base64編碼Java密碼學
- Java之Base64編碼解析Java
- JS 簡單實現UTF-8編碼,Base64編碼JS
- Base64編碼的全面介紹
- rust實戰系列-base64編碼Rust
- 一文搞懂影片編解碼原理
- Base64自定義編碼表及破解
- 用於將位元組進行base64編碼或解碼(C語言實現)C語言
- 檔案 編碼為Base64字串字串
- Thrift原理分析(二)協議和編解碼協議
- base16,base32,base64 編碼方式的通俗講解
- Unicode編碼解碼Unicode
- python base64 編解碼,轉換成Opencv,PIL.Image圖片格式PythonOpenCV
- 圖片 base64 編碼還原成圖片
- netty系列之:java中的base64編碼器NettyJava
- Base64 編碼知識,一文打盡!
- WebAssembly體驗之編碼base64(AssemblyScript使用教程)Web
- Javascript編碼解碼URLJavaScript
- Go ARM64 Base64編碼優化小記Go優化
- Go語言基礎-常見編碼(Json、Base64)GoJSON
- netty系列之:netty中的核心編碼器base64Netty
- 深入 JavaScript 原型繼承原理——babel 編譯碼解讀JavaScript原型繼承Babel編譯
- Go JSON編碼與解碼?GoJSON
- OpenLR 的編碼與解碼
- python中的編碼&解碼Python