Hutool工具类
- UUID
- SecureUtil
Hutool 是一款由国人开发的轻量级 Java 通用工具类库,核心目标是简化 Java 开发流程,它对开发中高频使用的字符串处理(StrUtil)、日期时间操作(DateUtil)、集合处理(CollUtil)、文件 IO(FileUtil)、加密解密(SecureUtil)、UUID / 分布式 ID 生成(IdUtil)、HTTP 请求(HttpUtil)等功能进行了轻量化、易用化封装,既解决了原生 API 调用繁琐(如 SimpleDateFormat 线程不安全、IO 流需手动关闭、加密算法初始化复杂)、功能单一的痛点,又提供了简洁的静态方法调用方式,一行代码即可完成常见操作,且整体轻量无冗余依赖、无侵入性,是 Java 开发中提升编码效率的实用工具库。
导入依赖
<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.2.4</version></dependency>最常用的模块包括:StrUtil(字符串)、DateUtil(日期)、CollUtil(集合)、FileUtil(文件)、HttpUtil(HTTP)、SecureUtil(加密)。
下面主要介绍 Hutool 库的 UUID 和 SecureUtil 工具类
UUID
UUID(Universally Unique Identifier,通用唯一识别码)本质是 128 位的数字标识符,其核心价值在于能在分布式系统中生成全局唯一的标识,无需依赖中央服务器分配,从根本上避免了多节点场景下的 ID 重复问题。
JDK 原生 API 生成 UUID 存在三大痛点:
格式固定:默认生成的 UUID 带 “-” 分隔符,而数据库主键、缓存 Key 等多数业务场景需手动去除分隔符;
形态单一:仅支持标准格式生成,无法直接产出纯数字、无符号等业务常用的 UUID 变体;
调用繁琐:需多步处理才能满足实际开发需求。
Hutool 框架的 cn.hutool.core.util.IdUtil 工具类针对上述痛点做了全面封装,既简化了调用流程(一行代码即可生成),又扩展了 UUID 的输出形态(支持标准带分隔符、无分隔符、纯数字等),还优化了生成性能(如fastUUID方法),是分布式场景下生成唯一标识的高效工具。
以下是最常用的生成方法:
- 生成标准 UUID
方法:IdUtil.randomUUID()
特点:生成 JDK 原生的标准 UUID,格式为 8-4-4-4-12,包含横线,基于随机数生成; - 生成简化版 UUID
方法:IdUtil.simpleUUID()
特点:生成无横线的 UUID(本质是把randomUUID()的横线去掉),字符串长度 32 位,适合存储、传输; - 生成基于 MAC 地址的 UUID(有序 UUID)
方法 1:IdUtil.fastUUID()(带横线)
方法 2:IdUtil.fastSimpleUUID()(无横线)
特点:基于 MAC 地址 + 时间戳生成,相比随机 UUID 更有序,生成速度更快,适合对 UUID 有序性有要求的场景。
SecureUtil
SecureUtil 是 Hutool 核心工具类之一,专门封装了 Java 原生的加密解密 API,核心目标是简化加密操作,它将 MD5、SHA、AES、RSA 等主流加密算法的复杂调用流程(如密钥生成、算法初始化、字节数组处理等)封装成极简的静态方法,让开发者无需关注底层实现细节,一行代码就能完成加密 / 解密、摘要计算等操作。
核心优势:
极简调用:原生 API 需多步手动处理的加密 / 解密、摘要计算等操作,通过 SecureUtil 仅需一行静态方法调用即可完成;
灵活适配:内置常用算法的默认配置,同时支持自定义算法参数(如 AES 模式、RSA 密钥长度);
智能兼容:自动处理字节数组与字符串的转换,规避编码不一致导致的乱码问题;
便捷的密钥管理:内置对称密钥、非对称密钥对的一键生成工具,无需手动封装 JDK 密钥生成器;
全场景覆盖:一站式支持对称加密、非对称加密、哈希 / 摘要、签名验签、随机数 / UUID 生成等安全需求。
下面对部分加密算法进行代码示例:
哈希 / 摘要算法(MD5/SHA256 等)
最常用的场景,用于生成数据的不可逆摘要
importcn.hutool.crypto.SecureUtil;publicclassSecureUtilDemo{publicstaticvoidmain(String[]args){StringrawStr="123456";// MD5摘要(32位小写)Stringmd5=SecureUtil.md5(rawStr);// SHA256摘要Stringsha256=SecureUtil.sha256(rawStr);// 带盐值的MD5(防碰撞)Stringmd5WithSalt=SecureUtil.md5(rawStr+"my_salt_123");System.out.println("MD5: "+md5);// e10adc3949ba59abbe56e057f20f883eSystem.out.println("SHA256: "+sha256);}}对称加密(AES/DES)
加密和解密使用同一密钥,适合小数据加密(推荐 AES)
importcn.hutool.crypto.SecureUtil;importcn.hutool.crypto.symmetric.AES;publicclassAesDemo{publicstaticvoidmain(String[]args){Stringcontent="敏感数据:123456789";// 生成AES密钥(也可自定义密钥,需16/24/32位)byte[]key=SecureUtil.generateKey("AES").getEncoded();AESaes=SecureUtil.aes(key);// 加密为Base64字符串(方便传输)StringencryptStr=aes.encryptBase64(content);// 解密StringdecryptStr=aes.decryptStr(encryptStr);System.out.println("加密后:"+encryptStr);System.out.println("解密后:"+decryptStr);// 还原原始内容}}非对称加密(RSA)
加密和解密使用公钥 / 私钥对,适合分布式场景(如接口签名、数据传输)
importcn.hutool.crypto.SecureUtil;importcn.hutool.crypto.symmetric.AES;publicclassAesDemo{publicstaticvoidmain(String[]args){Stringcontent="敏感数据:123456789";// 生成AES密钥(也可自定义密钥,需16/24/32位)byte[]key=SecureUtil.generateKey("AES").getEncoded();AESaes=SecureUtil.aes(key);// 加密为Base64字符串(方便传输)StringencryptStr=aes.encryptBase64(content);// 解密StringdecryptStr=aes.decryptStr(encryptStr);System.out.println("加密后:"+encryptStr);System.out.println("解密后:"+decryptStr);// 还原原始内容}}签名验签(防数据篡改)
基于 RSA/DSA 实现签名,确保数据传输过程中未被篡改
importcn.hutool.crypto.SecureUtil;importcn.hutool.crypto.asymmetric.RSA;publicclassSignDemo{publicstaticvoidmain(String[]args){Stringcontent="需要签名的数据";RSArsa=SecureUtil.rsa();// 私钥签名(生成Base64格式签名)Stringsign=rsa.signBase64(content.getBytes());// 公钥验签booleanverify=rsa.verify(content.getBytes(),sign);System.out.println("验签结果:"+verify);// 输出 true}}