加密解密工具 - SecureUtil
# 加密解密工具 - SecureUtil
简介
SecureUtil
是 Hutool 提供的一个加密解密工具类,封装了常见的对称加密、非对称加密和摘要算法,并提供了密钥生成的快捷方法。通过 SecureUtil
,开发者可以快速实现数据的加密、解密、摘要计算、签名验证等操作,极大简化了加密解密相关的编码工作。
# 1. 对称加密
对称加密是一种常见的加密方式,加密和解密使用相同的密钥。SecureUtil
支持常见的对称加密算法,如 AES 和 DES。
# 使用 AES 对称加密
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.symmetric.AES;
public class SecureUtilExample {
public static void main(String[] args) {
// 生成 AES 对象,使用随机密钥
AES aes = SecureUtil.aes();
// 明文
String content = "Hello, Hutool!";
// 加密
String encrypted = aes.encryptHex(content);
System.out.println("加密后的内容: " + encrypted);
// 解密
String decrypted = aes.decryptStr(encrypted);
System.out.println("解密后的内容: " + decrypted);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
SecureUtil.aes()
:生成 AES 加密对象,使用随机生成的密钥。- 返回值:返回
AES
对象,支持加密和解密操作。
- 返回值:返回
AES.encryptHex(String data)
:使用 AES 算法对数据进行加密,返回十六进制字符串。data
:待加密的字符串。- 返回值:返回加密后的十六进制字符串。
AES.decryptStr(String encryptedData)
:使用 AES 算法对加密数据进行解密。encryptedData
:加密后的十六进制字符串。- 返回值:返回解密后的明文字符串。
作用: 对称加密适用于传输敏感数据,如加密用户密码、数据传输等。
实际开发场景: 在应用中经常需要对用户的敏感信息(如密码、支付信息)进行加密存储和解密验证。
# 2. 摘要算法
摘要算法用于生成数据的唯一摘要值(也称为哈希值),常用于数据完整性校验。SecureUtil
支持常见的 MD5、SHA1 以及 HMAC 摘要算法。
# 使用 MD5 生成数据摘要
import cn.hutool.crypto.SecureUtil;
public class SecureUtilExample {
public static void main(String[] args) {
// 生成 MD5 摘要
String content = "Hello, Hutool!";
String md5 = SecureUtil.md5(content);
System.out.println("MD5 摘要: " + md5);
}
}
2
3
4
5
6
7
8
9
10
SecureUtil.md5(String data)
:生成数据的 MD5 摘要。data
:待计算的字符串。- 返回值:返回计算后的 MD5 摘要值。
SecureUtil.sha1(String data)
:生成数据的 SHA-1 摘要。data
:待计算的字符串。- 返回值:返回计算后的 SHA-1 摘要值。
SecureUtil.hmacMd5(String key)
:生成基于 HMAC 的 MD5 摘要算法对象,支持传入密钥。key
:HMAC 密钥。- 返回值:返回
HMac
对象,支持加密操作。
作用: 摘要算法用于校验数据完整性,如校验文件是否被篡改、用户密码存储等。
实际开发场景: 在文件传输、数据存储时,需要使用摘要算法生成哈希值,以确保数据在传输或存储过程中未被篡改。
# 3. 非对称加密
非对称加密使用一对密钥(公钥和私钥),公钥加密的数据只能通过对应的私钥解密,反之亦然。SecureUtil
支持 RSA 和 DSA 非对称加密算法。
# 使用 RSA 非对称加密
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.asymmetric.RSA;
public class SecureUtilExample {
public static void main(String[] args) {
// 生成 RSA 对象,使用随机密钥对
RSA rsa = SecureUtil.rsa();
// 明文
String content = "Hello, Hutool!";
// 公钥加密
String encrypted = rsa.encryptBase64(content, RSA.KEY_TYPE_PUBLIC);
System.out.println("加密后的内容: " + encrypted);
// 私钥解密
String decrypted = rsa.decryptStr(encrypted, RSA.KEY_TYPE_PRIVATE);
System.out.println("解密后的内容: " + decrypted);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
SecureUtil.rsa()
:生成 RSA 加密对象,使用随机生成的密钥对。- 返回值:返回
RSA
对象,支持加密和解密操作。
- 返回值:返回
RSA.encryptBase64(String data, String keyType)
:使用 RSA 算法对数据进行加密,返回 Base64 编码字符串。data
:待加密的字符串。keyType
:加密密钥类型(RSA.KEY_TYPE_PUBLIC
表示公钥加密,RSA.KEY_TYPE_PRIVATE
表示私钥加密)。- 返回值:返回加密后的 Base64 编码字符串。
RSA.decryptStr(String encryptedData, String keyType)
:使用 RSA 算法对加密数据进行解密。encryptedData
:加密后的 Base64 编码字符串。keyType
:解密密钥类型(RSA.KEY_TYPE_PRIVATE
表示私钥解密,RSA.KEY_TYPE_PUBLIC
表示公钥解密)。- 返回值:返回解密后的明文字符串。
作用: 非对称加密适用于需要安全传输数据的场景,如数字签名、身份认证等。
实际开发场景: 在安全敏感的系统中,非对称加密用于身份认证、数据加密、签名验证等场景。
# 4. UUID 生成
SecureUtil
提供了生成不含 "-"
的 UUID 的方法,常用于生成唯一标识符。
# 生成 UUID
import cn.hutool.crypto.SecureUtil;
public class SecureUtilExample {
public static void main(String[] args) {
// 生成不含 "-" 的 UUID
String uuid = SecureUtil.simpleUUID();
System.out.println("生成的 UUID: " + uuid);
}
}
2
3
4
5
6
7
8
9
SecureUtil.simpleUUID()
:生成不含"-"
的 UUID。- 返回值:返回生成的 UUID 字符串。
作用: UUID 用于生成全局唯一的标识符,确保标识符在分布式系统中不重复。
实际开发场景: 在分布式系统中生成唯一标识符、创建唯一订单号或会话 ID 时,常使用 UUID。
# 5. 密钥生成
SecureUtil
提供了对称加密和非对称加密密钥的生成方法,支持生成单独的密钥和密钥对。
# 生成对称加密密钥
import cn.hutool.crypto.SecureUtil;
import javax.crypto.SecretKey;
public class SecureUtilExample {
public static void main(String[] args) {
// 生成 AES 密钥
SecretKey key = SecureUtil.generateKey("AES");
System.out.println("生成的 AES 密钥: " + key.getEncoded());
}
}
2
3
4
5
6
7
8
9
10
SecureUtil.generateKey(String algorithm)
:生成指定算法的对称加密密钥。algorithm
:加密算法名称(如"AES"
、"DES"
)。- 返回值:返回生成的
SecretKey
对象。
SecureUtil.generateKeyPair(String algorithm)
:生成指定算法的密钥对,用于非对称加密。algorithm
:加密算法名称(如"RSA"
、"DSA"
)。- 返回值:返回生成的密钥对。
SecureUtil.generateSignature(String algorithm)
:生成指定算法的签名对象。algorithm
:签名算法名称(如"SHA256withRSA"
)。- 返回值:返回生成的签名对象。
作用: 用于生成加密密钥或密钥对,适用于需要自定义密钥的场景。
实际开发场景: 在加密通信、数据保护、身份认证中,通常需要生成和管理加密密钥。