Base64加密原理


當重要的參數在地址欄要顯示的時候,通常會對其進行加密

一.Base64編碼原理

  Base64索引表,字符選用了"A-Z、a-z、0-9、+、/" 64個可打印字符。數值代表字符的索引,這個是標准Base64協議規定的,不能更改。64個字符用6個bit位就可以全部表示,一個字節有8個bit 位,剩下兩個bit就浪費掉了,這樣就不得不犧牲一部分空間了。這里需要弄明白的就是一個Base64字符是8個bit,但是有效部分只有右邊的6個 bit,左邊兩個永遠是0。

  

  采用最小公倍數來覺得用6個bit來表示傳統的8個bit的字符,避免空間的浪費,是最減少浪費的方案

  那么怎么用6個有效bit來表示傳統字符的8個bit呢?8和6的最小公倍數 是24,也就是說3個傳統字節可以由4個Base64字符來表示,保證有效位數是一樣的,這樣就多了1/3的字節數來彌補Base64只有6個有效bit 的不足。你也可以說用兩個Base64字符也能表示一個傳統字符,但是采用最小公倍數的方案其實是最減少浪費的。結合下邊的圖比較容易理解。Man是三個 字符,一共24個有效bit,只好用4個Base64字符來湊齊24個有效位。紅框表示的是對應的Base64,6個有效位轉化成相應的索引值再對應 Base64字符表,查出"Man"對應的Base64字符是"TWFU"。說到這里有個原則不知道你發現了沒有,要轉換成Base64的最小單位就是三個字節,對一個字符串來說每次都是三個字節三個字節的轉換,對應的是Base64的四個字節。這個搞清楚了其實就差不多了。

  

如果字符串不是傳統字符的3的倍數的話,那么最后剩余的一個或者兩個字符要怎么辦呢

  我們可以用兩 個Base64來表示一個字符或用三個Base64表示兩個字符,像下圖的A對應的第二個Base64的二進制位只有兩個,把后邊的四個補0就是了。所以 A對應的Base64字符就是QQ。上邊已經說過了,原則是Base64字符的最小單位是四個字符一組,那這才兩個字 符,后邊補兩個"="吧。其實不用"="也不耽誤解碼,之所以用"=",可能是考慮到多段編碼后的Base64字符串拼起來也不會引起混淆。由此可見 Base64字符串只可能最后出現一個或兩個"=",中間是不可能出現"="的。下圖中字符"BC"的編碼過程也是一樣的。

  

JAVA采用JDK方式編碼

public static void jdkBase64(){
        Base64.Encoder encoder = Base64.getEncoder();
        String s = encoder.encodeToString(src.getBytes());
        System.out.println("加密:"+s);
        Base64.Decoder decoder = Base64.getDecoder();
        System.out.println("解密"+ new String(decoder.decode(s)));
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM