Base64的算法公開,秘鑰公開,基本上就是一張字符的映射表,很容易被破解。所以說Base64不能叫做算法加密。
應(yīng)用場(chǎng)景介紹
NO1、簡(jiǎn)單的加密(加密)
NO2、電子郵件傳輸
NO3、網(wǎng)絡(luò)數(shù)據(jù)傳輸
NO4、秘鑰存儲(chǔ)
NO5、圖片加密
NO6、數(shù)字證書存儲(chǔ)
NO7、OpenSSL操作Base64產(chǎn)生數(shù)字證書
通常我們用Base64只是做一些簡(jiǎn)單的加密。畢竟不好安全的。
Base64編碼原理
Base64的原理其實(shí)就是使用64個(gè)字符對(duì)照進(jìn)行編碼,同理有Base32,Base16編碼。標(biāo)準(zhǔn)Base64編碼使用的64個(gè)字符如下:

Base64的本質(zhì)就是將一種二進(jìn)制數(shù)據(jù)轉(zhuǎn)成文本數(shù)據(jù)的方案。對(duì)于非二進(jìn)制先轉(zhuǎn)換為二進(jìn)制,然后在連續(xù)6bit,計(jì)算成十進(jìn)制,然后根據(jù)值索引對(duì)應(yīng)的字符。最終得到一個(gè)文本字符串。
假如要對(duì)? Hello!進(jìn)行Base64編碼。
其轉(zhuǎn)換過程為:

轉(zhuǎn)換講解: 將二進(jìn)制轉(zhuǎn)換為6bit位, 例如100001轉(zhuǎn)為10進(jìn)制 就是 2^5+2^0 = 33,
結(jié)論:
原始字符串編碼和編碼之后的長(zhǎng)度比為? 4/3
這個(gè)長(zhǎng)度比很重要 - 比原始字符串長(zhǎng)度短,則需要使用更大的編碼字符集,這并不我們想要的;長(zhǎng)度比越大,則需要傳輸越多的字符,傳輸時(shí)間越長(zhǎng)。Base64應(yīng)用廣泛的原因是在字符集大小與長(zhǎng)度比之間取得一個(gè)較好的平衡,適用于各種場(chǎng)景。
注意:
如果原始長(zhǎng)度不能被3整除,則使用0值來補(bǔ)充原始字符串

注:圖表中藍(lán)色背景的二進(jìn)制0值是額外補(bǔ)充的。
Hello!! Base64編碼的結(jié)果為 SGVsbG8hIQAA 。最后2個(gè)零值只是為了Base64編碼而補(bǔ)充的,在原始字符中并沒有對(duì)應(yīng)的字符,那么Base64編碼結(jié)果中的最后兩個(gè)字符 AA 實(shí)際不帶有效信息,所以需要特殊處理,以免解碼錯(cuò)誤。
標(biāo)準(zhǔn)Base64編碼通常用 = 字符來替換最后的 A ,即編碼結(jié)果為 SGVsbG8hIQ== 。因?yàn)?= 字符并不在Base64編碼索引表中,其意義在于結(jié)束符號(hào),在Base64解碼時(shí)遇到 = 時(shí)即可知道一個(gè)Base64編碼字符串結(jié)束。
如果Base64編碼字符串不會(huì)相互拼接再傳輸,那么最后的 = 也可以省略,解碼時(shí)如果發(fā)現(xiàn)Base64編碼字符串長(zhǎng)度不能被4整除,則先補(bǔ)充 = 字符,再解碼即可。
解碼是對(duì)編碼的逆向操作,但注意一點(diǎn): 對(duì)于最后的兩個(gè) = 字符,轉(zhuǎn)換成兩個(gè) A 字符,再轉(zhuǎn)成對(duì)應(yīng)的兩個(gè)6比特二進(jìn)制0值,接著轉(zhuǎn)成原始字符之前,需要將最后的兩個(gè)6比特二進(jìn)制0值丟棄,因?yàn)樗鼈儗?shí)際上不攜帶有效信息 。
總結(jié)
Base64本質(zhì)是一種數(shù)據(jù)編碼,不能用于加密或者數(shù)據(jù)校驗(yàn)。