Base64加密JAVA实现

227 阅读2分钟

概述

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);
    }