Java base64加密解密 兩種實現方式
1、為什麼要使用Base 64
Base 64主要用途不是加密,而是把一些二進位制數轉成普通字元,方便在網路上傳輸。 由於一些二進位制字元在傳輸協議中屬於
控制字元,不能直接傳送,所以需要轉換一下才可以。由於某些系統中只能使用ASCII字元,Base64就是用來將非ASCII字元的數
據轉換成ASCII字元的一種方法,Base64特別適合在http,mime協議下快速傳輸資料。比如網路中圖片的傳輸。
Base64,並非安全領域下的加密解密演算法。雖然經常遇到所謂的base64的加密解密。但base64只能算是一個編碼演算法,對數
據內容進行編碼來適合傳輸。雖然base64編碼過後原文也變成不能看到的字元格式,但是方式初級又簡單。
2、Base 64 原理
Base64編碼方法,要求把每三個8Bit的位元組轉換為四個6Bit的位元組,其中,轉換之後的這四個位元組中每6個有效bit為是有效
資料,空餘的那兩個 bit用0補上成為一個位元組。因此Base64所造成資料冗餘不是很嚴重,Base64是當今比較流行的編碼方法,
因為它編起來速度快而且簡單。
舉個例子,有三個位元組的原始資料:aaaaaabb bbbbccccc ccdddddd(這裡每個字母表示一個bit位)
那麼編碼之後會變成: 00aaaaaa 00bbbbbb 00cccccc 00dddddd
所以可以看出base64編碼簡單,雖然編碼後不是明文,看不出原文,但是解碼也很簡單
2、Base64加密解密的實現方式:兩種
package com.liuxd; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; import java.util.Base64; /** * Created by Liuxd on 2018-11-02. */ public class TestString { public static void main(String[] args) throws Exception { String str = "青鋒劍,偃月刀"; base64(str); enAndDeCode(str); } /** * Base64 * */ public static void base64(String str) { byte[] bytes = str.getBytes(); //Base64 加密 String encoded = Base64.getEncoder().encodeToString(bytes); System.out.println("Base 64 加密後:" + encoded); //Base64 解密 byte[] decoded = Base64.getDecoder().decode(encoded); String decodeStr = new String(decoded); System.out.println("Base 64 解密後:" + decodeStr); System.out.println(); } /** * BASE64加密解密 */ public static void enAndDeCode(String str) throws Exception { String data = encryptBASE64(str.getBytes()); System.out.println("sun.misc.BASE64 加密後:" + data); byte[] byteArray = decryptBASE64(data); System.out.println("sun.misc.BASE64 解密後:" + new String(byteArray)); } /** * BASE64解密 * @throws Exception */ public static byte[] decryptBASE64(String key) throws Exception { return (new BASE64Decoder()).decodeBuffer(key); } /** * BASE64加密 */ public static String encryptBASE64(byte[] key) throws Exception { return (new BASE64Encoder()).encodeBuffer(key); } }
輸出結果:
Base 64 加密後:6Z2S6ZSL5YmR77yM5YGD5pyI5YiA
Base 64 解密後:青鋒劍,偃月刀sun.misc.BASE64 加密後:6Z2S6ZSL5YmR77yM5YGD5pyI5YiA
sun.misc.BASE64 解密後:青鋒劍,偃月刀