java中Base64轉碼與解碼(加密與解密)原理與使用
來自: http://blog.csdn.net//chenleixing/article/details/46543901
Base64是網絡上最常見的用于傳輸8Bit字節代碼的編碼方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的詳細規范。Base64編碼可用于在HTTP環境下傳遞較長的標識信息。例如,在Java Persistence系統Hibernate中,就采用了Base64來將一個較長的唯一標識符(一般為128-bit的UUID)編碼為一個字符串,用作HTTP表單和HTTP GET URL中的參數。在其他應用程序中,也常常需要把二進制數據編碼為適合放在URL(包括隱藏表單域)中的形式。此時,采用Base64編碼具有不可讀性,即所編碼的數據不會被人用肉眼所直接看到,算是起到一個加密的作用。
Base64使用A--Z,a--z,0--9,+,/ 這64個字符,編碼原理是將3個字節轉換成4個字節( (3 X 8) = 24 = (4 X 6) )先讀入3個字節,每讀一個字節,左移8位,再右移四次,每次6位,這樣就有4個字節了,這樣還不能保證得到的字符都是可見字符,為了達到此目的,Base64制定了一個編碼表,進行統一的轉換。碼表的大小為2^6=64,這也是Base64名稱的由來。 當剩下的字符數量不足3個字節時,則應使用0進行填充,相應的,輸出字符則使用'='占位,因此編碼后輸出的文本末尾可能會出現1至2個'='。解碼原理是將4個字節轉換成3個字節.先讀入4個6位(用或運算),每次左移6位,再右移3次,每次8位,這樣就還原了。
Base64編碼表
Value Encoding Value Encoding Value Encoding Value Encoding
0 A 17 R 34 i 51 z
1 B 18 S 35 j 52 0
2 C 19 T 36 k 53 1
3 D 20 U 37 l 54 2
4 E 21 V 38 m 55 3
5 F 22 W 39 n 56 4
6 G 23 X 40 o 57 5
7 H 24 Y 41 p 58 6
8 I 25 Z 42 q 59 7
9 J 26 a 43 r 60 8
10 K 27 b 44 s 61 9
11 L 28 c 45 t 62 +
12 M 29 d 46 u 63 /
13 N 30 e 47 v
14 O 31 f 48 w (pad) =
15 P 32 g 49 x
16 Q 33 h 50 y
Base64是一種很常見的編碼規范,其作用是將二進制序列轉換為人類可讀的ASCII字符序列,常用在需用通過文本協議(比如HTTP和SMTP)來傳輸二進制數據的情況下。Base64并不是一種用于安全領域的加密解密算法(這類算法有DES等),盡管我們有時也聽到使用Base64來加密解密的說法,但這里所說的加密與解密實際是指編碼(encode)和解碼(decode)的過程,其變換是非常簡單的,僅僅能夠避免信息被直接識別。
Base64編解碼算法都很簡單,網上有很多源碼,這里就不介紹了。
那java中如何使用這種編碼呢?其實JDK里邊相應的類和方法,但是API里是看不到的,網上都說是編寫JDK的內部人員專用的,java中可以直接使用,但不提倡大家用,可以看看這個http://wenda.haosou.com/q/1378566517069409。
不過,對此有開源的jar包, javabase64-1.2.jar,下載地址。引入這個jar包后,幾行代碼就可以實現編碼與解碼了:
示例代碼:
String類型 進行Base64編碼
String encoded = Base64.encode("Hello, world!");
String類型 進行Base64解碼
String decoded = Base64.decode(encoded);
指定字符編碼方式
String encoded = Base64.encode("Hello, world!", "UTF-8");
String decoded = Base64.decode(encoded, "UTF-8");
對文件進行編碼:
如果文件比較小,可以通過以下方式,直接讀取到內存中進行編碼處理
byte[] source = ...; // load your data here
byte[] encoded = Base64.encode(source);
byte[] decoded = Base64.decode(encoded);
如果大件比較大,則建議使用stream:
代碼示例Base64編碼:
InputStream inputStream = new FileInputStream("source.jpg");
OutputStream outputStream = new FileOutputStream("encoded.b64");
Base64.encode(inputStream, outputStream);
outputStream.close();
inputStream.close();
代碼示例Base64解碼:
InputStream inputStream = new FileInputStream("encoded.b64");
OutputStream outputStream = new FileOutputStream("decoded.jpg");
Base64.decode(inputStream, outputStream);
outputStream.close();
inputStream.close();
base64編碼解碼,java中base64使用,base64編碼介紹與原理,base64加密與解密