Java 加密

工具类

java 复制代码
package demo1;

import java.nio.charset.StandardCharsets;
import java.util.Base64;

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;

public class EncryptUtil {

	 private static final String AES_ALGORITHM = "AES";
	    // AES加密模式为CBC,填充方式为PKCS5Padding
	    private static final String AES_TRANSFORMATION = "AES/CBC/PKCS5Padding";
	    // AES密钥为16位
	    private static final String AES_KEY = "1234567890123456";
	    // AES初始化向量为16位
	    private static final String AES_IV = "abcdefghijklmnop";

	    /**
	     * AES加密
	     *
	     * @param data 待加密的数据
	     * @return 加密后的数据,使用Base64编码
	     */
	    public static String encrypt(String data) throws Exception {
	        // 将AES密钥转换为SecretKeySpec对象
	        SecretKeySpec secretKeySpec = new SecretKeySpec(AES_KEY.getBytes(), AES_ALGORITHM);
	        // 将AES初始化向量转换为IvParameterSpec对象
	        IvParameterSpec ivParameterSpec = new IvParameterSpec(AES_IV.getBytes());
	        // 根据加密算法获取加密器
	        Cipher cipher = Cipher.getInstance(AES_TRANSFORMATION);
	        // 初始化加密器,设置加密模式、密钥和初始化向量
	        cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec);
	        // 加密数据
	        byte[] encryptedData = cipher.doFinal(data.getBytes(StandardCharsets.UTF_8));
	        // 对加密后的数据使用Base64编码
	        return Base64.getEncoder().encodeToString(encryptedData);
	    }

	    /**
	     * AES解密
	     *
	     * @param encryptedData 加密后的数据,使用Base64编码
	     * @return 解密后的数据
	     */
	    public static String decrypt(String encryptedData) throws Exception {
	        // 将AES密钥转换为SecretKeySpec对象
	        SecretKeySpec secretKeySpec = new SecretKeySpec(AES_KEY.getBytes(), AES_ALGORITHM);
	        // 将AES初始化向量转换为IvParameterSpec对象
	        IvParameterSpec ivParameterSpec = new IvParameterSpec(AES_IV.getBytes());
	        // 根据加密算法获取解密器
	        Cipher cipher = Cipher.getInstance(AES_TRANSFORMATION);
	        // 初始化解密器,设置解密模式、密钥和初始化向量
	        cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivParameterSpec);
	        // 对加密后的数据使用Base64解码
	        byte[] decodedData = Base64.getDecoder().decode(encryptedData);
	        // 解密数据
	        byte[] decryptedData = cipher.doFinal(decodedData);
	        // 返回解密后的数据
	        return new String(decryptedData, StandardCharsets.UTF_8);
	    }

}

测试

ini 复制代码
package demo1;

public class Encrypt {

	public static void main(String[] args) throws Exception {
		
		String data = "Hello World";

        String encryptedData = EncryptUtil.encrypt(data);
        System.out.println("加密后的数据:" + encryptedData);

        String decryptedData = EncryptUtil.decrypt(encryptedData);
        System.out.println("解密后的数据:" + decryptedData);
	}

}

改进

将密钥存储在系统环境变量中

相关推荐
无关86886 分钟前
Spring Boot 项目标准化部署打包实战
java·spring boot·后端
Qhappy29 分钟前
AI逆向实战:从零还原某航空App的AES加密
javascript·后端
tonydf30 分钟前
Nginx爆新的RCE漏洞!别担心,平滑升级即可。
后端·nginx
Java编程爱好者43 分钟前
JVM GC调优实战:从线上频繁Full GC到RT降低80%的全过程
后端
Master_Azur43 分钟前
JavaEE之多线程
后端
阿丰资源1 小时前
基于Spring Boot的酒店客房管理系统
java·spring boot·后端
无籽西瓜a1 小时前
【西瓜带你学Kafka | 第八期】 Kafka的主从同步、消息可靠性、流处理与顺序消费(文含图解)
java·分布式·后端·kafka·消息队列·mq
zzqssliu1 小时前
SpringBoot框架搭建跨境独立站|Taocarts代购系统订单模块深度开发
java·spring boot·后端
Loo国昌1 小时前
从 Agent 编排到 Skill Runtime:企业 AI 工程化的下一层抽象
大数据·人工智能·后端·python·自然语言处理
小羊在睡觉1 小时前
力扣239. 滑动窗口最大值
数据结构·后端·算法·leetcode·go