1. 程式人生 > >Java base64加密解密 兩種實現方式

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 解密後:青鋒劍,偃月刀