当前位置: 首页 > news >正文

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}}
http://www.cnnetsun.cn/news/158288.html

相关文章:

  • 2.1 CPU脚本性能优化简介
  • Langchain-Chatchat问答系统压测报告:万级QPS承载能力验证
  • Langchain-Chatchat支持自定义元数据字段:扩展文档属性信息
  • 双侧独立电驱动车辆转向控制:Matlab/Simulink建模之旅
  • 500kW三相光伏并网逆变器仿真模型探索
  • 基于Optislang的电机多目标优化:以电机气息磁通密度空间某一阶次为优化目标教程
  • 彼得林奇对公司自由现金流转换率的分析
  • 通达信止损价位
  • Langchain-Chatchat与Elasticsearch集成:增强全文检索能力
  • 历年中国海洋大学计算机考研复试上机真题
  • Langchain-Chatchat与OpenAI对比:为何本地化部署更受企业青睐
  • 用 SAT 运行时跟踪自动生成 ABAP 的 UML 时序图:拦截标准生成器,输出 PlantUML,让文档从痛苦变成顺手
  • 什么是护网(HVV)?参加护网需要掌握什么技术?
  • 通过微调通用视觉或时序大模型提升小样本预测能力,或利用生成模型(如GAN、扩散模型)进行高质量数据增强与情景模拟
  • Rust嵌入式开发终极指南:用cross实现DMA驱动的零配置跨编译
  • Carnac:让你的键盘操作惊艳全场!3大核心功能深度解析
  • 5分钟搞定FastGPT上下文管理:让AI对话像真人一样连贯自然
  • Java开发者转型AI应用开发工程师:零门槛入门+框架选型+项目实践
  • 实战分享:如何用FunASR构建游戏语音交互系统
  • iperf3网络性能测试终极指南:Windows与Android双平台完整教程
  • Twisted WebSocket开发指南:构建高性能实时应用
  • 5大实用技巧:轻松掌握Chipsbank APTool V7200量产工具
  • DragonflyDB性能革命:如何突破Redis传统架构的性能瓶颈
  • HTML 与 CSS 基础入门笔记
  • Langchain-Chatchat在物业管理中的应用:业主手册智能咨询服务
  • 0v0.pro、周免:GPT-5.2-CHAT
  • 【JavaWeb】Node.js_简介和安装
  • 终极音频修复方案:深度学习降噪技术完全指南
  • Open-AutoGLM权限模型解密:4步构建零信任数据访问机制
  • React Native滑动删除动画完整实现指南:从基础到高级技巧