概述
Base64是一种常见的加密算法,JDK1.8版本提供了相关的工具类来使用。单纯的使用是可以的。不过为了更安全的操作,可以利用(盐值) 自定义格式多次加密保证安全。
源码链接地址
di.zhang BASE64工具类的gitHub地址👨💻
项目引入的包
import java.io.UnsupportedEncodingException;
import java.util.Base64;
普通加密,解密形式
/**
* Description: base64加密
*
* @Author: di.zhang
* @Date: 2023/11/13 15:57
* @Param: java.lang.string
* @Return: java.lang.string
*/
public static String encrypt(String str) {
if (StringUtils.isEmpty(str)) {
throw new NullPointerException("加密字符不能为空");
}
byte[] bytes = new byte[0];
try {
bytes = str.getBytes("utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
return Base64.getEncoder().encodeToString(bytes);
}
/**
* Description: base64解密
*
* @Author: di.zhang
* @Date: 2023/11/13 15:59
* @Param: java.lang.string
* @Return: java.lang.string
*/
public static String decrypt(String str) {
if (StringUtils.isEmpty(str)) {
throw new NullPointerException("解密字符不能为空");
}
String decryptStr = null;
try {
decryptStr = new String(Base64.getDecoder().decode(str.getBytes()), "utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
return decryptStr;
}
加盐值的加密,解密形式
/**
* Description: base64加盐加密
*
* @Author: di.zhang
* @Date: 2023/11/20 17:16
* @Param: java.lang.string
* @Return: java.lang.string
*/
private static String saltEncrypt(String str) {
if (StringUtils.isEmpty(str)) {
throw new NullPointerException("加密字符不能为空");
}
byte[] bytes = new byte[0];
try {
//加盐
String tmpStr = str + SALT;
bytes = tmpStr.getBytes("utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
//多次加密
for (int i = 0; i < REPEAT; i++) {
bytes = Base64.getEncoder().encode(bytes);
}
return new String(bytes);
}
/**
* Description: base64加盐解密
*
* @Author: di.zhang
* @Date: 2023/11/13 15:59
* @Param: java.lang.string
* @Return: java.lang.string
*/
public static String saltDecrypt(String str) {
if (StringUtils.isEmpty(str)) {
throw new NullPointerException("解密字符不能为空");
}
String decryptStr = null;
try {
byte[] bytes = str.getBytes();
//多次解密
for (int i = 0; i < 3; i++) {
bytes = Base64.getDecoder().decode(bytes);
}
decryptStr = new String(bytes, "utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
//删除盐值
return decryptStr.substring(0, decryptStr.length() - SALT.length());
}
测试类
public static void main(String[] args) {
String str = "测试base64加密";
String encryptStr = encrypt(str);
System.out.println("加密:" + encryptStr);
String decryptStr = decrypt(encryptStr);
System.out.println("解密:" + decryptStr);
String saltStr = "测试base64加密salt{}";
String saltEncryptStr = saltEncrypt(saltStr);
System.out.println("salt加密:" + saltEncryptStr);
String saltDecryptStr = saltDecrypt(saltEncryptStr);
System.out.println("salt解密:" + saltDecryptStr);
}