news 2026/8/7 6:18:13

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/8/7 2:15:52

2.1 CPU脚本性能优化简介

1.帧率与性能瓶颈 2.CPU脚本性能优化1.帧率与性能瓶颈 1).什么是性能瓶颈想象一下你在厨房做饭, 需要同时处理多个任务: 切菜, 炒菜, 调味; 如果切成速度很慢, 那么整个做饭过程就会被拖慢, 切菜就是瓶颈; 游戏开发中的性能瓶颈也是一样的道理当我们玩游戏时, 画面是一帧一帧的…

作者头像 李华
网站建设 2026/8/7 11:42:15

Langchain-Chatchat问答系统压测报告:万级QPS承载能力验证

Langchain-Chatchat问答系统压测报告&#xff1a;万级QPS承载能力验证 在企业知识管理日益智能化的今天&#xff0c;一个能快速响应、准确作答且保障数据安全的本地化AI问答系统&#xff0c;已成为组织提效的关键基础设施。面对员工高频查询制度流程、技术文档等场景&#xff0…

作者头像 李华
网站建设 2026/8/7 14:31:53

Langchain-Chatchat支持自定义元数据字段:扩展文档属性信息

Langchain-Chatchat 支持自定义元数据字段&#xff1a;扩展文档属性信息 在企业级智能问答系统的落地实践中&#xff0c;一个反复被提及的挑战是——AI 看得懂文字&#xff0c;却看不懂上下文。 比如&#xff0c;当 HR 员工询问“最新的年假政策”时&#xff0c;系统若仅依赖语…

作者头像 李华
网站建设 2026/8/7 13:00:36

双侧独立电驱动车辆转向控制:Matlab/Simulink建模之旅

matlab/simulink建模:双侧独立电驱动车辆转向控制 履带车考虑滑转滑移的转向控制模型&#xff0c;包含双侧独立电驱动履带车动力学模型&#xff0c;车速和横摆角速度控制器(基于pi和SMC两种控制算法对比)&#xff0c;作业工具模型等。 工况: 1.大半径转向 2.中半径转向 3.原地转…

作者头像 李华
网站建设 2026/8/7 22:05:42

500kW三相光伏并网逆变器仿真模型探索

500kW三相光伏并网逆变器的仿真模型&#xff1a; 1.光伏PV&#xff0c; DC/DC采用MPPT最大功率点跟踪控制&#xff1b; 2. DC/AC采用功率_电流双闭环控制&#xff0c;有功功率和无功功率解耦控制前馈补偿&#xff0c;SVPWM空间电压矢量调制&#xff1b; 3. 并网功率因数可调&am…

作者头像 李华