Base64是一種直接利用64個可打印字符來表示二進制數據的算法,也是在網絡傳輸中較爲常見的一種加密算法,從JDK 1.8版本開始提供有java.util.Base64的工具類,並且提供有兩個Base64的內部類實現數據加密與解密操作:
範例:實現Base64加密與解密操作
import java.util.Base64;
public class JavaAPIDemo378 {
public static void main(String[] args) {
String str="abcdefg";
String enStr=new String(Base64.getEncoder().encode(str.getBytes()));//加密
System.out.println(enStr);
String oldStr=new String(Base64.getDecoder().decode(enStr));//解密
System.out.println(oldStr);
}
}
執行結果
YWJjZGVmZw==
abcdefg
因爲這是一個公版算法,所以不安全,可以利用加鹽值"salt"的方式
範例:基於Base64定義複雜加密與解密操作
package com.lxh.fifteenchapter;
import java.util.Base64;
public class JavaAPIDemo379 {
public static void main(String[] args) {
String str=StringUtil.encode("ABCDEF");
System.out.println(str);//加密
System.out.println(StringUtil.decode(str));//解密
}
}
class StringUtil{
private static final String SALT="LLXX";// 公共的鹽值
private static final int REPEAT=5; //加密次數
public static String encode(String str) {//加密處理
String temp=str+"{"+SALT+"}"; //鹽值對外不公佈
byte data[]=temp.getBytes(); //將字符串變爲字節數組
for(int x=0;x<REPEAT;x++) {
data=Base64.getEncoder().encode(data);
}
return new String(data);
}
public static String decode(String str) {//解密操作
byte [] data=str.getBytes(); //獲取加密內容
for (int i = 0; i < REPEAT; i++) {
data=Base64.getDecoder().decode(data);// 多次解密
}
return new String(data).replaceAll("\\{\\w+\\}",""); //刪除鹽值格式
}
}
執行結果
VmxaYVYxTXhTa2RUYTFwWFlUSlNjMVJWYUc5VWJGbDNWMjA1VUZWVU1Eaz0=
ABCDEF