Java 加密框架 02 Base64

一段文字在經過 Base64 編碼後面目全非,而經過Base64解碼後又能恢復。這很有加密解密的意味。不過Base64 算法並不是加密算法,Base64 算法的轉換方式很像古典加密算法中的單表置換算法。

Base64 算法最早用於解決郵件傳輸問題。在早期電子郵件只允許ASCII碼字符。非ASCII碼字符在傳輸時會有問題,所以出現了 Base64編碼。

Base64 是一種基於64個字符的編碼算法。經過Base64 編碼後的數據會比原始數據略長,爲原來的4/3倍。Base64 編碼後的字符串的字符數是4的整數倍。

這張映射表中,value 是十進制編碼 ,Encoding 是字符。共映射了64個字符。最後一個=,是永遠補位的。

Base64 有2個規範:
RFC 2045:規定每行位76個字符,每行末尾需添加一個回車換行符,即便是最後一行不夠76個字符,也要加換行符
RFC 4648: 沒有換行符

Base64 還有幾個相近的算法如 Base32,Base16 。爲了能在http中以get方式傳輸二進制數據,還衍生了 url Base64。

url Base64 算法只要是替換了Base64映射表中的第62和63個字符。將+ 替換成 -,/替換成_ 。對於補位號 = , Bouncy Castle 使用.做補位符。Commons Codec 不使用補位符。

Base64 算法有編碼和解碼操作可以充當加密和解碼操作。可以用做簡單的加密。但要認識到 Base64 不能算是一種加密算法。 Base64 常用做密鑰,密文和證書的一種通用存儲編碼格式。


Base64編碼的操作:
1 將給定的字符串以字符爲單位,轉換爲對應的字符編碼
2 將字符編碼轉換爲二進制
3 對獲得的二進制做分組轉換操作:每3個8位二進制碼爲一組,轉換爲每4個6位二進制碼位一組(不足6位時低位補0)
4 對4-6二進制碼補位,高位補2個0 ,組成4個8位二進制
5 將4-8二進制轉換爲十進制
6 通過映射表得到對應字符,不夠4組的補=

從jdk1.8起,java提供了Base64 的實現,可以直接使用java.util.Base64。在jdk1.8之前,Java 並沒有提供公開的Base64 實現(在 sun.misc 包中有內部實現),一般是自己實現,或引用commons-codec包

String s = "Base64是網絡上最常見的用於傳輸8Bit字節代碼的編碼方式之一";
byte[] b = s.getBytes("UTF-8");
byte[] out = java.util.Base64.getEncoder().encode(b);
System.out.println(new String(out));
out = java.util.Base64.getMimeEncoder().encode(b);
System.out.println(new String(out));
out = java.util.Base64.getUrlEncoder().encode(b);
System.out.println(new String(out));



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章