1. 对称加密 (Symmetric Encryption)
-
特点:
加密和解密使用同一个密钥。
速度快,适合大量数据或文件加解密。
安全性完全依赖于密钥管理,密钥泄露风险需注意。
-
算法示例:
- AES、DES 等。
-
使用场景:
- 数据传输量大且对密钥安全性可控。
-
注意:
前后端必须共享密钥。
密钥传输必须安全。
2. 非对称加密 (Asymmetric Encryption)
加密用公钥,解密用私钥。
公钥可公开,私钥需安全存储。
速度慢,不适合大文件加解密。
-
算法示例:
- RSA、ECC 等。
-
使用场景:
- 数据量小,对安全性要求高,或需要通过网络交换密钥。
-
注意:
- 数据接收方公布公钥,私钥保留。
3. 混合加密 (Hybrid Encryption)
-
方法:
使用非对称加密交换对称加密密钥(会话密钥)。
使用对称加密进行实际数据加解密。
-
优势:
- 结合对称加密的高效性与非对称加密的安全性。
-
使用场景:
- 大多数实际应用场景。
-
加密时序图:
对称加密:加密业务数据
非对称加密:加密对称密钥
4. AES加密工具类 (AESUtil)
4.1 依赖
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.18</version>
</dependency>
4.2 功能
生成随机 AES 密钥
数据加密/解密
Base64 编码/解码
Hex字符串 ↔ byte[] 转换4.3 核心方法
-
生成密钥:
String getAESKey(int length) // 指定长度随机字符串密钥 byte[] generateRandomAesKey() // 随机AES密钥字节数组 String generateRandomAesKeyWithBase64() // Base64编码 -
加密/解密:
byte[] encrypt(byte[] data, byte[] aesKey) byte[] decrypt(byte[] data, byte[] aesKey) String encryptToBase64(String data, String aesKey) String decryptFromBase64(String data, String aesKey) String encryptWithKeyBase64(String data, String aesKey) String decryptWithKeyBase64(String data, String aesKey) -
格式转换:
String toHexString(byte[] b) // byte[] → Hex byte[] toBytes(String s) // Hex → byte[]
5. RSA加密工具类 (RSAUtil)
5.1 功能
生成密钥对
公钥加密 / 私钥解密
支持 Base64 和 Hex 编码转换
5.2 核心方法
-
密钥生成:
Map generateRandomToBase64Key() -
加解密:
byte[] encryptByPublicKey(byte[] data, String publicKey, int length) byte[] decryptByPrivateKey(byte[] data, String privateKey, int length) -
编码转换:
byte[] decryptBASE64(String src) String encryptBASE64(byte[] src) String toHexString(byte[] b) byte[] toBytes(String s) -
说明:
加密结果为
byte[],可转换为 Base64 或 Hex 字符串后传输。解密前需确保密文格式与加密方法一致。
6. 加密选择建议
| 场景 | 方案 |
|---|---|
| 数据量大、低安全需求 | 对称加密 |
| 数据量小、高安全需求或密钥需网络传输 | 非对称加密 |
| 综合性能与安全 | 混合加密(对称加密 + 非对称加密密钥传输) |