文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java:Hutool工具箱之Hutool-crypto加密解密

2023-08-21 08:26

关注

在这里插入图片描述

文档

重点单词:

symmetric [sɪ'metrɪk] adj. 对称的asymmetric [ˌeɪsɪˈmetrɪk] adj. 不对称digest [daɪˈdʒest] n. 摘要

摘自文档

加密分为三种:对称加密(symmetric),例如:AES、DES等非对称加密(asymmetric),例如:RSA、DSA等摘要加密(digest),例如:MD5、SHA-1、SHA-256、HMAC等hutool-crypto针对这三种加密类型分别封装,并提供常用的大部分加密算法。对于非对称加密,实现了:RSADSA对于对称加密,实现了:AESARCFOURBlowfishDESDESedeRC2PBEWithMD5AndDESPBEWithSHA1AndDESedePBEWithSHA1AndRC2_40对于摘要算法实现了:MD2MD5SHA-1SHA-256SHA-384SHA-512HmacMD5HmacSHA1HmacSHA256HmacSHA384HmacSHA512其中,针对常用到的算法,模块还提供SecureUtil工具类用于快速实现加密。

依赖

<dependency>   <groupId>cn.hutoolgroupId>    <artifactId>hutool-cryptoartifactId>    <version>5.8.10version>dependency>

1、摘要算法 digest

以MD5 为例

package com.mouday;import cn.hutool.crypto.SecureUtil;public class Demo {    public static void main(String[] args) {        String s = SecureUtil.md5("666");        System.out.println(s);        // fae0b27c451c728867a567e8c1bb4e53    }}

2、对称加密 symmetric

以AES 加密为例

package com.mouday;import cn.hutool.crypto.KeyUtil;import cn.hutool.crypto.SecureUtil;import cn.hutool.crypto.symmetric.SymmetricAlgorithm;import cn.hutool.crypto.symmetric.SymmetricCrypto;public class Demo {    public static void main(String[] args) {        // 16位自定义密码        String key = "1234567891011123";        String content = "明文";        // 生成密钥        byte[] byteKey = SecureUtil.generateKey(SymmetricAlgorithm.AES.getValue(), key.getBytes()).getEncoded();        SymmetricCrypto aes = SecureUtil.aes(byteKey);        // 加密        String encryptData = aes.encryptBase64(content);        System.out.println(encryptData);        // nuP9GXvHgzW6Q12notB8jQ==        // 解密        String decryptData = aes.decryptStr(encryptData);        System.out.println(decryptData);        // 明文    }}

这里有个问题,如果秘钥长度不够16位,会报错

Exception in thread "main" cn.hutool.crypto.CryptoException: InvalidKeyException: Invalid AES key length: 15 bytes

长度只能是16位,24位,32位

interface AESConstants {    int AES_BLOCK_SIZE = 16;    int[] AES_KEYSIZES = new int[]{16, 24, 32};}

参考
https://toscode.gitee.com/dromara/hutool/issues/I4O1EB

3、不对称加密 asymmetric

以RSA为例

package com.mouday;import cn.hutool.crypto.SecureUtil;import cn.hutool.crypto.asymmetric.KeyType;import cn.hutool.crypto.asymmetric.RSA;public class Demo {    public static void main(String[] args) {        String content = "明文";        // 当使用无参构造方法时,Hutool将自动生成随机的公钥私钥密钥对:        RSA rsa = SecureUtil.rsa();        // 获得私钥        rsa.getPrivateKey();        rsa.getPrivateKeyBase64();        // 获得公钥        rsa.getPublicKey();        rsa.getPublicKeyBase64();        // 私钥加密        String encryptData = rsa.encryptBase64(content, KeyType.PrivateKey);        System.out.println(encryptData);        // BigHAtzA/JtjgnLR6MLJ32qvWCC5+B0c6Un+r34zeZ/dygWsWlu8zAEdfr7kfcuF3C1gvevUjV844xi2huzL6x0HqlefmGF/XirUuxPVqJYHzSpzRXGUXK0qaRC1n/fDK3uqEkzy1nfKsnhR2aHVJmVe7BZtjrKsAeClgUzCFJI=        // 公钥加密        String decryptData = rsa.decryptStr(encryptData, KeyType.PublicKey);        System.out.println(decryptData);        // 明文    }}

来源地址:https://blog.csdn.net/mouday/article/details/127958443

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯