Base64簡介
Base64編碼介紹
Base64是一種基於64個可列印字元來表示二進位制資料的表示方法。由於2的6次方等於64,所以每6個位元為一個單元,對應某個可列印字元。
比如三個位元組有24個位元,對應於4個Base64單元,即3個位元組需要用4個可列印字元來表示。完整的base64定義可見RFC 1421和RFC 2045。編碼後的資料比原始資料略長,為原來的4/3。所以當原有資料不是3位元組的倍數時,會將二進位制資料後補0,湊夠三個位元組,轉換為4個Base64單元,都是補位的則用個=替代一個Base64單元。當原資料長度不是3的整數倍時,如果最後剩下一個輸入資料,在編碼結果後加2個“=”;如果最後剩下兩個輸入資料,編碼結果後加1個“=”;如果沒有剩下任何資料,就什麼都不要加,這樣才可以保證資料還原的正確性。(見下面的編碼過程)
Base64常用於在通常處理文字資料的場合,表示、傳輸、儲存一些二進位制資料。包括MIME的email、在XML中儲存複雜資料。使用的字元包括大小寫字母各26個,加上10個數字,和加號“+”,斜槓“/”,一共64個字元,等號“=”用來作為字尾用途。
為什麼使用 Base64
base64不是安全領域下的加密解密演算法。能起到安全作用的效果很差,而且很容易破解,他核心作用應該是傳輸資料的正確性,有些閘道器或系統只能使用ASCII字元。Base64就是用來將非ASCII字元的資料轉換成ASCII字元的一種方法,而且base64特別適合在http,mime協議下快速傳輸資料。
Base64是網路上最常見的用於傳輸8Bit位元組程式碼的編碼方式之一,Base64編碼可用於在HTTP環境下傳遞較長的標識資訊。採用Base64編碼具有不可讀性,即所編碼的資料不會被人用肉眼所直接看到。
在前端應用:將圖片轉換為Base64編碼,可以讓你很方便地在沒有上傳檔案的條件下將圖片插入其它的網頁、編輯器中。 這對於一些小的圖片是極為方便的,因為你不需要再去尋找一個儲存圖片的地方。
在電子郵件傳輸中的應用,見下文。
base64編碼過程
Base64編碼要求把3個8位位元組(3*8=24)轉化為4個6位的位元組(4*6=24),之後在6位的前面補兩個0,形成8位一個位元組的形式。 如果剩下的字元不足3個位元組,則用0填充,輸出字元使用’=’,因此編碼後輸出的文字末尾可能會出現1或2個’=’。
具體參見文中的圖:http://www.cnblogs.com/hongru/archive/2012/01/14/2321397.html
文中的圖清晰明瞭。
url base64
為解決在base64後的字元在url中正常使用,可採用一種用於URL的改進Base64編碼,它不在末尾填充’=’號,並將標準Base64中的“+”和“/”分別改成了“-”和“_”,這樣就免去了在URL編解碼和資料庫儲存時所要作的轉換,避免了編碼資訊長度在此過程中的增加,並統一了資料庫、表單等處物件識別符號的格式。
MIME base64
jdk8中提供了Base64類,實現了基本的base64,url Base64 和 mime Base64
mime Base64 用在郵件傳輸中,在MIME格式的電子郵件中,base64可以用來將binary的位元組序列資料編碼成ASCII字元序列構成的文字。需要注意的是在電子郵件中,根據RFC 822規定,每76個字元,還需要加上一個回車換行。
思考
base64 怎麼編碼中文的,utf-8中,一個漢字佔3個位元組
參考資料
相關文章
- golang - base64簡單解讀Golang
- Java Base64編碼使用介紹Java
- Base64編碼的全面介紹
- 簡介
- Jira使用簡介 HP ALM使用簡介
- BookKeeper 介紹(1)--簡介
- Amphenol簡介
- Vagrant簡介
- PySimpleGUI 簡介GUI
- Protobuf簡介
- MyBatis 簡介MyBatis
- jango簡介Go
- cookie 簡介Cookie
- Session 簡介Session
- Cookie簡介Cookie
- Virgilio 簡介
- Django簡介Django
- ElasticSearch簡介Elasticsearch
- Javascript 簡介JavaScript
- Electron簡介
- Dubbo 簡介
- JavaScript簡介JavaScript
- CSS 簡介CSS
- 反射簡介反射
- JanusGraph -- 簡介
- CSS簡介CSS
- Bootstrap 簡介boot
- pwa簡介
- Apache簡介Apache
- JAVA簡介Java
- JUC簡介
- sass簡介
- NATS簡介
- Mybatis簡介MyBatis
- Zookeeper簡介
- Handlebars 簡介
- HTML簡介HTML
- jwt簡介JWT