news 2026/2/13 15:35:55

Hutool工具类

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Hutool工具类

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}}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/10 11:04:26

JAI智能研发助手:让每一位开发者都能享受AI红利

在建广数科看来&#xff0c;AI的魅力在于它能解决真实世界的具体问题。JAI系列产品&#xff0c;正是为了让AI技术从宏伟蓝图走向开发者的日常工作台&#xff0c;在具体场景中创造可见、可感的价值。新员工“代码分析”&#xff0c;快速从新人变主力“如何快速理解一个陌生项目&…

作者头像 李华
网站建设 2026/2/2 2:21:27

架构设计:1000W并发如何部署?部署多少节点?量化标准是什么?

1000W并发如何部署&#xff1f;部署多少节点&#xff1f;量化标准是什么&#xff1f; 对于如何支持 1000 万用户的问题&#xff0c;实际上是一个相当抽象的问题。 对于技术开发者来说&#xff0c;需要量化。 什么是量化&#xff1f;就是需要一个明确的性能指标数据&#xff0c;…

作者头像 李华
网站建设 2026/2/8 10:42:29

Redis 哨兵模式

一、基本概念 哨兵模式是 Redis 提供的一种高可用性解决方案&#xff0c;主要用于在主从复制架构中实现自动故障转移 主从复制&#xff08;Replication&#xff09; 一个主节点&#xff08;Master&#xff09;负责写操作。 多个从节点&#xff08;Slave/Replica&#xff09;复制…

作者头像 李华
网站建设 2026/2/9 22:34:25

基于FPGA的LDPC译码算法:从理论到实现

基于FPGA的LDPC译码算法(提供ISE和Qii两个版本)&#xff0c;包括MATLAB仿真&#xff0c;verilog程序&#xff0c;支持定制算法程序 从LDPC码的基础理论出发&#xff0c;在研究前人成果的基础上&#xff0c;针对CMMB标准&#xff0c;采取理论阐述、算法仿直等方式进行了LDPC码的…

作者头像 李华
网站建设 2026/2/11 14:05:02

通达信金叉顶背加仓、减仓、顶背

{}RSV:(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100; K:SMA(RSV,3,1),COLORWHITE; D:SMA(K,3,1),COLORYELLOW; J:3*K-2*D,COLORYELLOW; 金叉:IF(SUM(CROSS(K,D)AND D<23,15)>2 AND CROSS(K,D)AND C>O,10,0),COLORFFFF00; 加仓:IF(J>D,J,DRAWNULL),COLORRED,LI…

作者头像 李华
网站建设 2026/2/13 9:08:51

Langchain-Chatchat问答系统异常检测机制:及时发现错误回答

Langchain-Chatchat问答系统异常检测机制&#xff1a;及时发现错误回答 在企业智能客服、内部知识库查询等场景中&#xff0c;一个看似流畅的回答背后可能隐藏着致命的“语言陷阱”——模型自信满满地给出了一条完全错误的信息。这种现象并非偶然&#xff0c;而是大语言模型&am…

作者头像 李华