[047][Crypto模块]基于 Hutool 的常见加解密算法封装与密钥自动生成

在线体验各类最新模型,更有模型 免费Token 额度领取!
立即体验
简介: 本文基于Hutool封装统一加解密框架,提供AES/RSA/SM2/SM4/HMAC等算法的`CryptoProcessor`标准接口,支持密钥自动生成与动态切换,解耦业务代码,兼顾国密合规与易用性,提升安全性与可测试性。(239字)

[047][Crypto模块]基于 Hutool 的常见加解密算法封装与密钥自动生成

Hutool 是一个优秀的 Java 工具库,提供了简单易用的加密 API。但直接在业务代码中调用 Hutool 仍然存在耦合。本文展示如何将 Hutool 的各种加解密算法封装为统一的 CryptoProcessor 接口,并实现密钥自动生成能力。

一、为什么选择 Hutool?

Hutool 的加密模块(cn.hutool.crypto)封装了 JDK 内置的加密算法和 BouncyCastle 的国密算法,使用起来非常简洁:

// 对称加密示例
AES aes = SecureUtil.aes(keyBytes);
String encryptHex = aes.encryptHex(data);
String decryptStr = aes.decryptStr(encryptHex);

相比于直接操作 Cipher,Hutool 大大减少了样板代码。同时,它支持 SM2/SM3/SM4 等国密算法,满足合规要求。

二、封装对称加密处理器:以 AES 为例

实现 CryptoProcessor 接口,内部持有 Hutool 的 AES 对象:

@RequiredArgsConstructor
public class AESCryptoProcessor implements CryptoProcessor {
   
    protected final AES aes;
    protected final SecretKey secretKey;

    public static AESCryptoProcessor create() {
   
        return create(SecretKeyGenerator.generateASEKey());
    }

    public static AESCryptoProcessor create(SecretKey secretKey) {
   
        Assert.notNull(secretKey, "'secretKey' must not be null");
        AES aes = SecureUtil.aes(secretKey.symmetricKeyByte());
        return new AESCryptoProcessor(aes, secretKey);
    }

    @Override
    public String encrypt(String data) {
   
        return aes.encryptHex(data);
    }

    @Override
    public String decrypt(String data) {
   
        return aes.decryptStr(data);
    }

    @Override
    public CryptoCategory getCategory() {
   
        return CryptoCategory.AES;
    }
    // 其他方法...
}

SecretKey 是一个简单的值对象,封装了对称密钥的 Hex 字符串(对于非对称,包含公私钥对)。SecretKeyGenerator 负责生成各种算法的密钥。

三、密钥自动生成器

SecretKeyGenerator 是一个接口,但提供了静态方法:

public interface SecretKeyGenerator {
   
    static SecretKey generateASEKey() {
   
        byte[] encoded = SecureUtil.generateKey(SymmetricAlgorithm.AES.getValue()).getEncoded();
        return new SecretKey(HexUtil.encodeHexStr(encoded));
    }

    static SecretKey generateRSAKey() {
   
        KeyPair keyPair = SecureUtil.generateKeyPair(AsymmetricAlgorithm.RSA.getValue(), 1024);
        return new SecretKey(
            HexUtil.encodeHexStr(keyPair.getPublic().getEncoded()),
            HexUtil.encodeHexStr(keyPair.getPrivate().getEncoded()));
    }

    static SecretKey generateSM2Key() {
    ... }
    static SecretKey generateHmacSHA256Key() {
    ... }
    // ...
}

这样,当用户在配置文件中没有提供密钥时,处理器可以通过 create() 方法自动生成密钥并创建实例,实现了“开箱即用”。

四、封装非对称加密处理器:以 RSA 为例

非对称加密相比对称加密多了一对密钥。Hutool 的 RSA 类支持通过公钥加密、私钥解密:

@RequiredArgsConstructor
public class RSACryptoProcessor implements CryptoProcessor {
   
    private final RSA rsa;
    private final SecretKey secretKey;

    public static RSACryptoProcessor create(SecretKey secretKey) {
   
        RSA rsa = SecureUtil.rsa(secretKey.privateKeyByte(), secretKey.publicKeyByte());
        return new RSACryptoProcessor(rsa, secretKey);
    }

    @Override
    public String encrypt(String content) {
   
        return rsa.encryptBase64(content, StandardCharsets.UTF_8, KeyType.PublicKey);
    }

    @Override
    public String decrypt(String content) {
   
        return rsa.decryptStr(content, KeyType.PrivateKey);
    }
}

注意:非对称加密对数据长度有限制,实际生产环境中通常会组合对称加密(如用 RSA 加密对称密钥,再用对称密钥加密业务数据)。本框架为简化演示,直接使用非对称加密短文本。

五、封装 HMAC 摘要处理器

摘要(消息认证码)接口是 DigestProcessor,HMac 需要密钥:

@RequiredArgsConstructor
public class HmacSHA256DigestProcessor implements DigestProcessor {
   
    private final HMac mac;
    private final SecretKey secretKey;

    @Override
    public String digest(String content) {
   
        return mac.digestHex(content);
    }
}

无密钥的摘要(如 SHA256、SM3)则不需要 SecretKey:

public class SHA256DigestProcessor implements DigestProcessor {
   
    private final Digester sha256;

    @Override
    public String digest(String content) {
   
        return sha256.digestHex(content);
    }

    @Override
    public SecretKey getSecretKey() {
   
        return null; // 不支持
    }
}

六、newInstance 方法的设计

每个处理器都提供了 newInstance()newInstance(SecretKey secretKey) 方法,用于动态创建新的处理器实例。这在多租户场景或需要临时更换密钥时非常有用:

// 创建一个默认密钥的 AES 处理器
CryptoProcessor defaultAes = AESCryptoProcessor.create();
// 根据特定租户的密钥创建新实例
CryptoProcessor tenantAes = defaultAes.newInstance(tenantSecretKey);
String encrypted = tenantAes.encrypt(data);

由于摘要处理器(SHA256/SM3)不需要密钥,newInstance(SecretKey) 返回 null 或抛出异常即可。

七、总结

通过封装 Hutool,我们获得了:

  • 统一接口:无论是对称、非对称还是摘要,都通过一致的 encrypt/decryptdigest 方法调用。
  • 密钥灵活性:可以从配置文件注入 Hex 字符串,也可以自动生成,满足开发和生产不同阶段的需求。
  • 易于测试:可以轻松 mock CryptoProcessor,无需真实调用加密库。
  • 支持国密:SM2/SM3/SM4 同样被封装在框架中,符合安全合规要求。

下一步可以扩展的包括:密钥版本管理、密钥轮换、与 KeyStore 集成等。

目录
相关文章
|
5天前
|
人工智能 弹性计算 运维
|
3天前
|
缓存 人工智能 安全
GPT-5.6 Terra与GPT-5.5性能实测:成本减半后的跑分对比与快速迁移指南
GPT-5.6 Terra 的定价为每百万 token 输入 2.50/输出 15。GPT-5.5 则是 5/ 30。Terra 的每一项费率,包括 $0.25/M 的缓存读取,都恰好是 GPT-5.5 的一半,因此在任何工作负载组合下,Terra 都固定 便宜 2.0x。以每天 10 万次请求、3K token 提示词计算,大约是 Terra 每天 2,000,GPT−5.5每天 4,000,即每月约 60,000对 120,000。问题在于:OpenAI 没有发布任何针对 Terra 的编码基准。那个著名的 91.9% Terminal-Bench 数字是 Sol 在 Ul
|
2天前
|
SQL 人工智能 自然语言处理
大模型内容安全实时防护:恶意Prompt注入拦截、越权阻断与熔断机制方案.166
本文系统阐述大模型输入安全防护体系,涵盖提示词注入、恶意Prompt拦截、越权阻断与输入熔断四大核心风险及应对方案。提出四层防护架构(预处理、检测、鉴权、熔断),结合规则引擎、语义识别与RBAC权限控制,实现全链路实时防护,保障业务合规、数据安全与服务稳定。
215 1
|
26天前
|
Linux 程序员 数据格式
【2026最新】Notepad++下载、安装和使用一篇搞定(附中文版安装包)
Notepad++ 是一款免费开源、轻量高效的 Windows 文本编辑器,支持 C/Python/HTML 等 80+ 语言语法高亮、代码折叠、正则替换、编码转换及插件扩展,专为程序员与文本处理用户打造,完美替代系统记事本。(239字)
|
10天前
|
人工智能 编解码 物联网
2026 最新Stable Diffusion 本地部署教程 下载安装使用详细图解(含官网安装包)
Stable Diffusion(SD)是2022年发布的开源文生图模型,由Stability AI等联合开发。支持文生图、图生图、局部重绘等,依托VAE降低算力需求,可在消费级显卡运行。本文提供秋葉aaaki制作的Windows整合包(含图形界面与插件),开箱即用,零配置启动。
|
11天前
|
人工智能 缓存 安全
Claude Code 封号真实原因曝光,这次彻底不装了,直接针对国内开发者的账号下手?
Claude Code 封号潮背后:逆向扒出客户端隐写区域标记,Anthropic 政策收紧叠加 DeepSeek 7 月涨价,国产替代更紧迫。
|
20天前
|
存储 人工智能 监控
QoderWork完全指南:从入门到精通,把“AI实习生”变成你的全能工作搭档
阿里云2026年推出的桌面端AI工作助手QoderWork,不止聊天,更可动手干活:本地运行、安全可控,支持文件整理、数据分析、PPT生成、网页开发等;内置专家套件、多Agent协作与自定义Skills,让AI真正成为你身边的“AI实习生”。
|
17天前
|
人工智能 JSON 自然语言处理
让教学更智慧:用阿里云百炼工作流,自动生成中小学教材内容#小有可为#有温度的AI
通过可视化工作流编排,将大模型推理能力转化为标准化的教学内容生成引擎。教师只需输入教材标题和适用学段,即可自动获得结构完整、符合课程标准的章节内容,大幅降低备课门槛,助力教育资源均衡化。
510 127
|
3天前
|
人工智能 缓存 JSON
刚刚 GPT-5.6 发布,吊打 Claude 5 和 Grok 4.5?一手实测来啦!
GPT-5.6 刚发布,跑分号称超越 Fable 5,真的假的?附一手实测,让 3 个最强 AI 编程模型 GPT-5.6 Sol、Claude Fable 5、Grok 4.5 在 Cursor 里同时一把梭开发网页游戏,看看最新模型到底谁更能打。
240 0