加密、解密算法 AES、DES
使用Hutool工具实现密钥+内容的加密与解密
Hutool是一个Java工具库,提供了丰富的加密解密工具类。下面我将介绍如何使用Hutool实现基于密钥的对称加密和解密。
签名方法 Mac、MessageDigest、Signature https://www.cnblogs.com/vipsoft/p/18795795
Java Hutool 实现非对称加密(RSA) https://www.cnblogs.com/vipsoft/p/18674812
1. 添加Hutool依赖
首先需要在项目中添加Hutool依赖:
Maven:
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.20</version> <!-- 使用最新版本 -->
</dependency>
Gradle:
implementation 'cn.hutool:hutool-all:5.8.20'
2. 对称加密实现
Hutool支持多种对称加密算法,如AES、DES等。下面以AES为例:
加密方法
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.symmetric.AES;
public class CryptoUtils {
    
    /**
     * AES加密
     * @param content 明文内容
     * @param key 密钥(16/24/32字节)
     * @return 加密后的Base64字符串
     */
    public static String encrypt(String content, String key) {
        // 构建AES对象
        AES aes = SecureUtil.aes(key.getBytes());
        // 加密为16进制表示
        return aes.encryptHex(content);
        // 或者加密为Base64
        // return aes.encryptBase64(content);
    }
}
解密方法
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.symmetric.AES;
public class CryptoUtils {
    
    /**
     * AES解密
     * @param encryptStr 加密后的字符串
     * @param key 密钥(必须与加密时相同)
     * @return 解密后的原文
     */
    public static String decrypt(String encryptStr, String key) {
        // 构建AES对象
        AES aes = SecureUtil.aes(key.getBytes());
        // 解密字符串
        return aes.decryptStr(encryptStr);
    }
}
3. 使用示例
public class Main {
    public static void main(String[] args) {
        String content = "这是一段需要加密的敏感数据";
        String key = "1234567890123456"; // AES密钥要求16/24/32字节
        
        // 加密
        String encrypted = CryptoUtils.encrypt(content, key);
        System.out.println("加密结果: " + encrypted);
        
        // 解密
        String decrypted = CryptoUtils.decrypt(encrypted, key);
        System.out.println("解密结果: " + decrypted);
    }
}
4. 其他加密算法
Hutool还支持其他对称加密算法,使用方法类似:
DES加密示例
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.symmetric.DES;
public class DesCryptoUtils {
    
    public static String encrypt(String content, String key) {
        DES des = SecureUtil.des(key.getBytes());
        return des.encryptHex(content);
    }
    
    public static String decrypt(String encryptStr, String key) {
        DES des = SecureUtil.des(key.getBytes());
        return des.decryptStr(encryptStr);
    }
}
5. 注意事项
- 
密钥长度: - AES:16/24/32字节
- DES:8字节
- 3DES:24字节
 
- 
安全性: - 不要使用简单易猜的密钥
- 实际项目中密钥应该安全存储,不要硬编码在代码中
 
- 
异常处理: - 实际使用时应该添加异常处理
- 加密解密可能抛出CryptoException
 
- 
编码问题: - 确保加密解密使用相同的字符编码(通常UTF-8)
 
以上示例展示了如何使用Hutool进行基于密钥的对称加密和解密操作。根据实际需求,你可以选择不同的加密算法和配置参数。
AES与DES加密算法的区别及应用场景
一、AES与DES的主要区别
| 对比维度 | AES (Advanced Encryption Standard) | DES (Data Encryption Standard) | 
|---|---|---|
| 推出时间 | 2001年 | 1977年 | 
| 密钥长度 | 128/192/256位 | 56位(实际64位,但8位用于奇偶校验) | 
| 分组长度 | 128位 | 64位 | 
| 加密轮数 | 10/12/14轮(取决于密钥长度) | 16轮 | 
| 安全性 | 高,目前无已知有效攻击 | 低,已被暴力破解 | 
| 算法结构 | 置换-置换网络(SPN) | Feistel网络 | 
| 性能 | 较快(硬件加速下更明显) | 较慢 | 
| 标准化 | NIST标准 | 原NIST标准(已淘汰) | 
二、安全性比较
- 
AES: - 目前没有已知的实用攻击方法能破解AES
- 即使使用256位密钥,在可预见的未来也是安全的
- 被美国政府用于保护最高机密信息(TOP SECRET)
 
- 
DES: - 1999年已被证明可在22小时内暴力破解
- 3DES(三重DES)提高了安全性但效率低下
- 已被NIST于2005年正式废弃
 
三、性能比较
- 
软件实现: - AES通常比DES/3DES快5-10倍
- AES算法设计更适合现代处理器
 
- 
硬件实现: - 现代CPU(如Intel AES-NI指令集)对AES有专门优化
- AES硬件加速后性能可提升10倍以上
 
四、典型应用场景
AES适用场景:
- 
高安全性需求: - 政府机密通信
- 军事数据加密
- 金融交易安全(如SSL/TLS)
 
- 
大数据量加密: - 全磁盘加密(如BitLocker)
- 数据库字段加密
- 大文件加密
 
- 
现代协议标准: - WiFi加密(WPA2/WPA3)
- VPN协议(IPSec)
- SSH协议
 
DES/3DES适用场景:
- 
遗留系统维护: - 需要与老旧系统兼容时
- 传统银行系统(逐步淘汰中)
 
- 
低安全性需求: - 内部非敏感数据加密
- 短期数据保护
 
- 
法律合规要求: - 某些行业特定法规可能暂时要求(越来越少)
 
五、选择建议
- 
优先选择AES的情况: - 所有新开发的系统
- 需要高安全性的应用
- 处理大量数据的场景
- 需要硬件加速的场景
 
- 
可能考虑3DES的情况: - 必须与老旧系统交互时
- 受限于特定行业法规时
- 短期过渡方案
 
- 
不应使用DES的情况: - 任何新系统设计
- 敏感数据传输
- 长期数据保护
 
六、Java实现示例对比
AES实现(Hutool):
// 加密
AES aes = SecureUtil.aes(key.getBytes());
String encrypted = aes.encryptHex(content);
// 解密
String decrypted = aes.decryptStr(encrypted);
3DES实现(Hutool):
// 加密
DESede des = SecureUtil.desede(key.getBytes()); // 密钥必须24字节
String encrypted = des.encryptHex(content);
// 解密
String decrypted = des.decryptStr(encrypted);
七、迁移建议
- 仍在使用DES/3DES的系统应尽快迁移到AES
- 迁移过程可采用双加密过渡方案:
- 新数据使用AES加密
- 旧数据保持3DES加密但逐步转换
 
- 密钥管理应同步升级
总结
AES作为DES的替代标准,在安全性、性能和适应性方面全面优于DES。除非有特殊的兼容性要求,现代系统都应采用AES作为默认的对称加密算法。DES因其固有的安全性弱点,已不再适合用于保护敏感信息。
本文来自博客园,作者:VipSoft 转载请注明原文链接:https://www.cnblogs.com/vipsoft/p/18797351
 
                    
                 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号