java中Base64轉碼與解碼(加密與解密)原理與使用

qfqa8728 8年前發布 | 35K 次閱讀 Java開發

來自: 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加密與解密

 

 

 本文由用戶 qfqa8728 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!