Java進階開發-基於Base64的加密與解密操作


基於Base64的加密與解密操作

  正常來講加密基本上永遠伴隨着解密,所謂的加密或者解密往往都是需要有一些所謂的規則。在JDK1.8開始提供有一組新的加密處理操作,Base64處理。在這個類里面有兩個內部類:

Base64.Encoder

加密處理

public byte[] encode(byte[] src)

Base64.Decoder

解密處理

public byte[] decode(String src)

  ·范例:實現加密與解密操作

 1 import java.util.Base64;
 2 public class Main {
 3     public static void main(String[] args) {
 4         String msg="hello,wanyu!";//要加密的信息
 5         String encMsg;
 6         String decMsg;
 7         encMsg=new String(Base64.getEncoder().encode(msg.getBytes()));
 8         decMsg=new String(Base64.getDecoder().decode(encMsg.getBytes()));
 9         System.out.println(encMsg);
10         System.out.println(decMsg);
11     }
12 }

    雖然Base64可以實現加密與解密的處理,但是其由於式一公版的算法,所以如果直接對數據進行加密往往並不安全,那么最好的做法是使用鹽值操作。

  ·范例:鹽值加密

 1 import java.util.Base64;
 2 public class Main {
 3     public static void main(String[] args) {
 4         String salt="Mufasa";
 5         String msg="hello,wanyu!"+"{"+salt+"}";//要加密的信息
 6         String encMsg;
 7         String decMsg;
 8         encMsg=new String(Base64.getEncoder().encode(msg.getBytes()));
 9         decMsg=new String(Base64.getDecoder().decode(encMsg.getBytes()));
10         System.out.println(encMsg);
11         System.out.println(decMsg);
12     }
13 }

    即便現在有鹽值實際上發現加密效果也不是很好,最好的做法是多次加密。

  ·范例:基於Base64的自定義加密

 1 import java.util.Base64;
 2 class StringUtil{
 3     private static final String SALT="Mufasa";  //公共的鹽值
 4     private static final int REPEAT = 3;        //加密3次
 5     /**
 6      * 加密處理
 7      * @param str 要加密的字符串,需要與鹽值整合
 8      * @return 加密后的數據
 9      */
10     public static String encode(String str){
11         String temp=str+"{"+SALT+"}";//鹽值不對外公布
12         byte[] data = temp.getBytes();//將字符串變為字節數組
13         for(int x=0;x<REPEAT;x++){
14             data=Base64.getEncoder().encode(data);//重復加密
15         }
16         return new String(data);
17     }
18     /**
19      * 進行解密處理
20      * @param str 輸入的密文
21      * @return 返回明文
22      */
23     public static String decode(String str){
24         byte[] data=str.getBytes();
25         for(int x=0;x<REPEAT;x++){
26             data=Base64.getDecoder().decode(data);
27         }   //正則表達式
28         return new String(data).replaceAll("\\{\\w+\\}","");
29     }
30 }
31 public class Main {
32     public static void main(String[] args) {
33         String encStr=StringUtil.encode("hello,this is a Base64 code");
34         System.out.println(encStr);
35         String decStr=StringUtil.decode(encStr);
36         System.out.println(decStr);
37     }
38 }

  其中鹽值SALT、重復次數REPEAT自定義。最好的做法是使用2-3種加密程序,同時進行、同時找到一些完全不可解密的操作


免責聲明!

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



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