1. 程式人生 > >什麽是Base64加密?為什麽要有Base64加密?

什麽是Base64加密?為什麽要有Base64加密?

包括 序列 http 表單 信息 常用 電子郵件 個人理解 傳遞

產生這篇文章的動力在於對接騰訊雲服務的時候每次都要進行Base64編碼之後才能進行簽名,之前只知道Base64是個算法,但是不知道為啥都用這個算法,這次為了鏈接Base64究竟是個什麽東東才在網絡上各種找資料,把覺得對自己有用的記錄下來了。

摘抄網絡上便於理解的概念:
基本概念和應用場景

Base64是一種基於64個可打印字符來表示二進制數據的表示方法。由於2的6次方等於64,所以每6個比特為一個單元,對應某個可打印字符。三個字節有24個比特,對應於4個Base64單元,即3個字節需要用4個可打印字符來表示。它可用來作為電子郵件的傳輸編碼。在Base64中的可打印字符包括字母A-Z、a-z、數字0-9 ,這樣共有62個字符,此外兩個可打印符號在不同的系統中而不同。編碼後的數據比原始數據略長,為原來的4/3。

Base64常用於在通常處理文本數據的場合,表示、傳輸、存儲一些二進制數據(或不可打印的字符串)。包括MIME的email,email via MIME, 在XML中存儲復雜數據.

在郵件中的用途:

在MIME格式的電子郵件中,base64可以用來將binary的字節序列數據編碼成ASCII字符序列構成的文本。使用時,在傳輸編碼方式中指定base64。使用的字符包括大小寫字母各26個,加上10個數字,和加號“+”,斜杠“/”,一共64個字符,等號“=”用來作為後綴用途。

在URL中的用途:

標準的Base64並不適合直接放在URL裏傳輸,因為URL編碼器會把標準Base64中的“/”和“+”字符變為形如“%XX”的形式,而這些“%”號在存入數據庫時還需要再進行轉換,因為ANSI SQL中已將“%”號用作通配符。為解決此問題,可采用一種用於URL的改進Base64編碼,它不在末尾填充‘=‘號,並將標準Base64中的“+”和“/”分別改成了“”和“-”,這樣就免去了在URL編解碼和數據庫存儲時所要作的轉換,避免了編碼信息長度在此過程中的增加,並統一了數據庫、表單等處對象標識符的格式。另有一種用於正則表達式的改進Base64變種,它將“+”和“/”改成了“!”和“-”,因為“+”,“

”在正則表達式中都可能具有特殊含義。 所以java.util.Base64類中才會有Encoder和UrlEncoder連個編碼和解碼器

用記事本打開exe、jpg、pdf這些文件時,我們都會看到一大堆亂碼,因為二進制文件包含很多無法顯示和打印的字符,所以,如果要讓記事本這樣的文本處理軟件能處理二進制數據,就需要一個二進制到字符串的轉換方法。Base64是一種最常見的二進制編碼方法。

Base64編碼的規則

1.base64是網絡上最常見的用於傳輸8bit字節代碼的編碼方式之一。
有時我們需要把二進制數據編碼為適合放在URL中的形式。
這時采用base64編碼具有不可讀性,即所編碼的數據不會被人直接看出。

2.用於在http環境下傳遞較長的標識信息。
base64要求把三個8Bit的字節轉換為四個6Bit的字節。
然後把6Bit再添加兩位高位0,組成四個8Bit的字節。
也就是說,轉換後的長度理論上將要比原來的長1/3.
編碼規則:
1.把三個字符變成四個字符。
2.沒76個字符加一個換行符。
3.最後的結束符也要處理。
更加詳細的算法參見百度百科或者查看jdk8中的java.util.Base64類的源代碼

最終的個人理解:

不能用少的長度表示多的數據,否則解碼會有不確定性,為什麽要把3個8bit變為4個6bit來傳輸,是因為3*8=4*6;8bit下最大的就是6bit,所以只能求6和8的最小公倍數。註意:Base64主要是用可打印字符來表示二進制數據,平常說的Base64加密一下是為了防止明文傳輸數據又為了方便解密而使用的。

什麽是Base64加密?為什麽要有Base64加密?