Java实现AES加密算法

本文详细介绍了AES对称加密算法的使用,包括加密和解密过程,以及与DES相比的安全性提升。同时提到了AES的密钥管理挑战,并对比了与非对称加密算法如RSA的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AES加密算法属于对称加密算法,秘钥长度比DES长,同样安全性也就更高

话不多说,直接上代码

1.AES加密(相对安全的填充方式)

public static String encryptAes(String data, String key) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidAlgorithmParameterException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
        // AES初始化向量为12位(随机)
        SecureRandom random = new SecureRandom();
        byte[] iv = new byte[12];
        random.nextBytes(iv);
        //密钥转换为SecretKeySpec对象
        SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(), "AES");
        GCMParameterSpec gcmSpec = new GCMParameterSpec(128, iv);
        //加密器(安全的填充方式)
        Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
        //初始化加密器
        cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, gcmSpec);
        //加密数据
        byte[] encryptData = cipher.doFinal(data.getBytes(StandardCharsets.UTF_8));
        //Base64编码
        return Base64.getEncoder().encodeToString(encryptData);

2.AES解密

public static String decryptAes(String data, String key) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidAlgorithmParameterException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
        // AES初始化向量(12位)
        String aesIv = "abcdefghijkl";
        //将密钥转换为SecretKeySpec对象
        SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(), "AES");
        GCMParameterSpec gcmSpec = new GCMParameterSpec(128, aesIv.getBytes());
        //解密器(必须与加密采用相同的填充方式)
        Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
        //初始化解密器
        cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, gcmSpec);
        //Base64解码
        byte[] decryptData = Base64.getDecoder().decode(data);
        //解密数据
        byte[] decryptedData = cipher.doFinal(decryptData);
        //返回解密后的数据
        return new String(decryptedData, StandardCharsets.UTF_8);
    }

注意:虽然AES安全性更高,但是其密钥长度较长,密钥管理困难,但是采用非对称加密算法就能避免这些问题,例如RSA加密算法(链接如下

Java实现RSA加密算法-CSDN博客

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值