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

这篇具有很好参考价值的文章主要介绍了Java:Hutool工具箱之Hutool-crypto加密解密。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

hutool-crypto,java,java,开发语言

文档

  • https://hutool.cn/docs/#/crypto/概述

重点单词:

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针对这三种加密类型分别封装,并提供常用的大部分加密算法。

对于非对称加密,实现了:

RSA
DSA

对于对称加密,实现了:

AES
ARCFOUR
Blowfish
DES
DESede
RC2
PBEWithMD5AndDES
PBEWithSHA1AndDESede
PBEWithSHA1AndRC2_40

对于摘要算法实现了:

MD2
MD5
SHA-1
SHA-256
SHA-384
SHA-512
HmacMD5
HmacSHA1
HmacSHA256
HmacSHA384
HmacSHA512

其中,针对常用到的算法,模块还提供SecureUtil工具类用于快速实现加密。

依赖

<dependency>
   <groupId>cn.hutool</groupId>
    <artifactId>hutool-crypto</artifactId>
    <version>5.8.10</version>
</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为例文章来源地址https://www.toymoban.com/news/detail-601136.html

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);
        // 明文
    }
}

到了这里,关于Java:Hutool工具箱之Hutool-crypto加密解密的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Matlab 优化工具箱

    语法:[x,fval,exitflag,output,lambda] = linprog(f,A,b,Aeq,beq,lb,ub,options) f、x、b、beq、lb 和 ub 是向量,A 和 Aeq 是矩阵。 示例1-1 : 语法:[x,fval,exitflag,output] = intlinprog(f,intcon,A,b,Aeq,beq,lb,ub,x0,options) f、x、intcon、b、beq、lb 和 ub 是向量,A 和 Aeq 是矩阵。 语法:x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub

    2024年02月02日
    浏览(57)
  • 密码算法工具箱

    这是一个密码算法工具箱软件,包含大多数密码键盘的算法,您可以利用他做加解密、校验或者其他功能。 ①本工具包含对称密钥算法、MAC算法、PINBLOCK算法、Hash算法、非对称密钥算法的常用功能。 ②支持国际(RSA、DES、3DES)和国密(SM2、SM3、SM4)算法。 ③支持windows和l

    2024年01月19日
    浏览(60)
  • PDF 工具箱

    PDF 工具箱 V9.0.0.1 程序:VB.net  运行库: NET Framework 4.5 下载:https://download.csdn.net/download/polloo2012/88399029 功能简介: 1、PDF文件多文件合并,可调整顺序。 2、PDF文件拆分,将每页拆分成独立的PDF文件。 3、PDF文件添加水印,文字或图片水印,图片水印可选择位置。 4、word/exce

    2024年02月09日
    浏览(47)
  • 29 旋转工具箱

    实现了一个菜单按钮的动画效果,当鼠标悬停在菜单按钮上时,菜单按钮会旋转315度,菜单按钮旋转的同时,菜单按钮旋转的8个小圆圈也会依次旋转360度,并且每个小圆圈的旋转方向和菜单按钮的旋转方向相反,当鼠标悬停在某个小圆圈上时,该小圆圈的旋转方向会变为顺时

    2024年01月18日
    浏览(58)
  • Python工具箱系列(三十)

    MySQL的口号是“世界上最流行的开源关系型数据库”,而PostgreSQL的Slogan则是“世界上最先进的开源关系型数据库(PostgreSQL: The World\\\'s Most Advanced Open Source Relational Database)”,一看这就是一对老冤家了。这两个口号很好的反映出了两者的形象特质:PostgreSQL是功能丰富,高大上的严

    2024年02月03日
    浏览(62)
  • (转载)matlab遗传算法工具箱

            以下内容大部分来源于《MATLAB智能算法30个案例分析》,仅为学习交流所用。         遗传算法(genetic algorithm,GA)是一种进化算法,其基本原理是仿效生物界中的“物竞天择、适者生存”的演化法则。遗传算法是把问题参数编码为染色体,再利用迭代的方式进行选

    2024年02月07日
    浏览(68)
  • Python工具箱系列(三十二)

    Elasticsearch是一个基于Lucene的搜索引擎。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful 的API接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是非常流行的企业级搜索引擎。官方支持的客户端语言包括Java、.NET(C#)、PHP、Python、Apa

    2024年02月05日
    浏览(52)
  • Python工具箱系列(三十九)

    现实世界中,大量存在着对数据压缩的需求。为此,python内置了zlib压缩库,可以方便的对任意对象进行压缩。 下述代码演示了对字符串进行压缩: 运行上述代码后,会发现压缩并不一定会减少字节数,压缩的效率取决于压缩内容中的冗余程度。对于第一句的中文压缩后反而

    2024年02月15日
    浏览(49)
  • Python工具箱系列(三十七)

    二进制文件操作(上) python比较擅长与文本相关的操作。但现实世界中,对于非文本消息的处理也很普遍。例如: ◆通过有线、无线传递传感器获得的测量数据。 ◆卫星通过电磁波发送测量数据。 ◆数据中心的数万台服务器发送当前CPU的占用率信息、内存占用量等众多指标

    2024年02月11日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包