Hutool-crypto加密解密

文章目录

  • 1. 介绍
  • 2. 加密分类
  • 3. crypto模块整体介绍
  • 4. 摘要加密(Digest)
    • 4.1 间接
    • 4.2 使用
  • 5. 对称加密(Symmetric)
    • 5.1 介绍
    • 5.2 使用
  • 6. 非对称加密(Asymmetric)
    • 6.1 介绍
    • 6.2 使用
  • 7. 国密算法(SM)

1. 介绍

在Java开发的过程中,很多场景下都需要加密解密。

比如对敏感数据的加密,对配置文件信息的加密,通信数据的加密等等。

今天介绍的是Hutool工具包中的加密模块 crypto

2. 加密分类

加密分为三类:

  • 对称加密(symmetric)

    常用的有AES、DES

  • 非对称加密(asymmetric)

    常用的有RSA,DSA

  • 摘要加密(digest)

    常用的有MD5,SHA-1

3. crypto模块整体介绍

在这里插入图片描述

  • 秘钥工具
  • 加密解密工具
  • BCUtil
  • 国密算法SmUtil
    在这里插入图片描述

4. 摘要加密(Digest)

4.1 间接

摘要算法是一种能产生特殊输出格式的算法,这种算法的特点是:无论用户输入设么长度的原始数据,讲过计算后输出的密文都是固定长度的,这种算法的原理是根据一定的运算规则进行某种形式的提取,这种提取就是摘要,比摘要的数据与元数据有密切联系。只要源数据稍有改变,输出的“摘要”便完全不同,因此,基于这种原理的额算法便能够对数据完整性提供健全的保证

但是,由于输出的密文是提取元数据经过处理的定长值,所以他已经不能还原为原数据,即消息摘要算法是不可逆的。理论上无法通过反向运算取得元数据内容。因此他通常值能被用来做数据的完整性验证

4.2 使用

这主要介绍md5加密

基本使用

/***  md5的基本使用*      生成32位的密文*/
@Test
public void MD5BasicTest() {System.out.println(new String(DigestUtil.md5("testaaa")));// 返回16进制形式  de2ec3065687316991579e6b9e6ce143System.out.println(DigestUtil.md5Hex("testaa"));
}

加盐、加盐位置、摘要次数

/***  md5的高级使用*      加盐  加盐的位置  摘要次数*/
@Test
public void MD5Test() {// 加盐  加盐的位置  摘要次数String salt = "md5Salt";int index = 0;int count = 2;MD5 md5 = new MD5(salt.getBytes(StandardCharsets.UTF_8), index, count);// 返回16进制格式System.out.println(md5.digestHex("testaa"));;
}

5. 对称加密(Symmetric)

5.1 介绍

对称加密(也就私钥加密),指加密和解密使用相同秘钥的加密算法。有时又叫传统密码算法,就是加密米哟啊能够从解密秘钥中推算出来,同时秘钥也可以从加密秘钥中推算出来。而在大多数的对称算法中,加密秘钥和解密秘钥是相同的,所以也成这种算法为私密秘钥算法或者单秘钥算法。

她要求发送方和接收方在安全通信之前,商定一个秘钥。

对称算法的安全性依赖于秘钥,泄露秘钥就意味着任何人都可以对他们发送和接收的消息进行解密,所以秘钥的保密性对通信的安全性至关重要。

5.2 使用

这儿介绍AES

基本使用

/*** 简单使用,直接使用秘钥加密解密*/
@Test
public void AESBasicTest() {// 生成秘钥,也可以手动指定byte[] key = SecureUtil.generateKey(SymmetricAlgorithm.AES.getValue()).getEncoded();// 构建SymmetricCrypto symmetricCrypto = new SymmetricCrypto(SymmetricAlgorithm.AES, key);// 加密System.out.println(new String(symmetricCrypto.encrypt("testaa")));// 生成16进制格式的System.out.println(symmetricCrypto.encryptHex("testaa"));// 解密System.out.println(new String(symmetricCrypto.decrypt(symmetricCrypto.encrypt("testaa"))));// 直接解密字符串System.out.println(symmetricCrypto.decryptStr(symmetricCrypto.encryptHex("testaa")));
}

高级使用

/*** AES 高级使用*      mode – 模式Mode*      padding – Padding补码方式*      key – 密钥,支持三种密钥长度:128、192、256位*      iv – 偏移向量,加盐   必须16位**  缺点,受到iv的影响,加密的字符串要么为空,要么为16位以上*/
@Test
public void AESTest() {// 生成秘钥,也可以手动指定byte[] key = SecureUtil.generateKey(SymmetricAlgorithm.AES.getValue()).getEncoded();String iv = "testiv0000000000";AES aes = new AES(Mode.CTS, Padding.PKCS5Padding, key, iv.getBytes(StandardCharsets.UTF_8));// 加密System.out.println(aes.encryptHex("testaa1234567899"));// 解密System.out.println(aes.decryptStr(aes.encrypt("testaa1234567899")));
}

6. 非对称加密(Asymmetric)

6.1 介绍

对于非对称加密,最常用的就是RSA和DSA

非堆成加密有公钥和私钥两个概念,私钥自己拥有,公钥公开。根据应用的不同,我们可以选择使用不同的秘钥进行加密

  1. 签名:使用私钥加密,公钥解密。用于让所有公钥的所有者验证私钥所有者的身份并且用来防止私钥所有者发布的内容被篡改,但是不是用来保证内容不被他人获得的
  2. 加密:用公钥加密,私钥解密。用于向公钥所有者发布星系,这个信息可能被他们篡改,但是无法被他人获取

6.2 使用

这儿介绍RSA

基本使用

/*** 基本使用*/
@Test
public void RSABasicTest() {RSA rsa = new RSA();// 获取公钥和私钥System.out.println(rsa.getPublicKey());System.out.println(rsa.getPrivateKeyBase64());System.out.println(rsa.getPrivateKey());System.out.println(rsa.getPrivateKeyBase64());// 私钥加密,公钥解密System.out.println(new String(rsa.encrypt("testaa", KeyType.PrivateKey)));System.out.println(new String(rsa.decrypt(rsa.encrypt("testaa", KeyType.PrivateKey), KeyType.PublicKey)));// 公钥加密,私钥解密System.out.println(new String(rsa.encrypt("testaa", KeyType.PublicKey)));System.out.println(new String(rsa.decrypt(rsa.encrypt("testaa", KeyType.PublicKey), KeyType.PrivateKey)));
}

高级使用

/*** 高级使用*  自定义生成 公钥和私钥*/
@Test
public void RSATest() {KeyPair keyPair = SecureUtil.generateKeyPair(AsymmetricAlgorithm.RSA.getValue());PrivateKey privateKey = keyPair.getPrivate();PublicKey publicKey = keyPair.getPublic();System.out.println(publicKey);System.out.println(privateKey);System.out.println("----------");RSA rsa = new RSA(privateKey, publicKey);// 私钥加密,公钥解密System.out.println(new String(rsa.encrypt("testaa", KeyType.PrivateKey)));System.out.println(new String(rsa.decrypt(rsa.encrypt("testaa", KeyType.PrivateKey), KeyType.PublicKey)));// 公钥加密,私钥解密System.out.println(new String(rsa.encrypt("testaa", KeyType.PublicKey)));System.out.println(new String(rsa.decrypt(rsa.encrypt("testaa", KeyType.PublicKey), KeyType.PrivateKey)));}

7. 国密算法(SM)

Hutool针对Bouncy Castle做了简化包装,用于实现国密算法中的SM2、SM3、SM4。

国密算法工具封装包括:

  • 非对称加密和签名:SM2
  • 摘要签名算法:SM3
  • 对称加密:SM4

国密算法需要引入Bouncy Castle库的依赖。

这不做介绍了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/72709.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TPM 密钥证明

文章参考了微软的TPM 密钥证明 每一个TPM在生产时,都会注入一个EK (Endorsement Key)密钥对。EK 对于每个 TPM 都是唯一的,不能更改或删除 EK。EK是一个模长为2048比特的RSA公私钥对,私钥保存在TPM内部,永…

生成keystore以及导出keystore公钥,私钥信息

有时候需要做一些证书,特别是安卓接入SDK,提交包什么的需要填入公钥私钥信息,可能需要RSA 1024位或其他位数的信息。 这里提供一个能获取keystore信息和公钥私钥的命令。 openssl我就不再写了,自己再百度下怎么处理。 1. 生成k…

中文聊天机器人

目录 一、项目介绍 wukong-robot介绍 特点 二、环境搭建 三、安装配置 四、录制唤醒词并使用机器人 要说当前最火的技术肯定就是人工智能和物联网了。 很多的厂家都不是从头到尾都自己实现的 截少了一块最后一个算法叫隐马尔可夫(都是人名的音译&#xff09…

计算机毕业论文选题推荐|软件工程|系列七

文章目录 导文题目导文 计算机毕业论文选题推荐|软件工程 (***语言)==使用其他任何编程语言 例如:基于(***语言)门窗账务管理系统的设计与实现 得到:基于JAVA门窗账务管理系统的设计与实现 基于vue门窗账务管理系统的设计与实现 等等 题目 基于(***语言)的家政服务系统…

计算机毕业论文选题推荐|软件工程|系列八

文章目录 导文题目导文 计算机毕业论文选题推荐|软件工程 (***语言)==使用其他任何编程语言 例如:基于(***语言)门窗账务管理系统的设计与实现 得到:基于JAVA门窗账务管理系统的设计与实现 基于vue门窗账务管理系统的设计与实现 等等 题目 基于(***语言)应用负载仿真计…

中国算力总规模全球第二,如何实现算力的技术升维?

光子盒研究院出品 近日,人民日报记者从工信部了解到,近年来,我国算力产业年增长率近30%,算力总规模位居全球第二。 工信部数据显示,截至去年底,我国算力总规模达到180EFLOPS(每秒18000京次浮点运…

吴军长文讲解算力:全球算力竞争中我们要做的三件事

这两天看到吴军的一段访谈,绝对是在算力这个话题领域中最深入浅出的一篇讲解了,把算力的概念、演进趋势,再到与经济发展如何挂钩、中国算力产业的发展方向,做了一个非常完整的梳理。 其中,吴军提到了算力竞争中&#…

我国的超算中心、智算中心、数据中心有多少?在哪里?啥规模?

目前,全国国家超级计算中心有十座,分别位于天津、广州、长沙、深圳、济南、无锡、郑州、昆山、成都和西安,其中深圳和西安中心二期正在建设,文昌航天超算中心已进入建设尾声。 超算中心项目 2023年4月17日,科技部启动了…

月薪25-80K丨一汽(南京)招聘雷达感知开发工程师、主管、主任、高级主任

点击上方“3D视觉工坊”,选择“星标” 干货第一时间送达 公司介绍: 一汽(南京)科技开发有限公司坐落于美丽的南京,归属中国一汽集团,我们依托深度学习、数据挖掘等AI核心技术,致力于自主突破自动…

运维工程师技能图

运维工程师(Operations)在国内又称为运维开发工程师(Devops),在国外称为 SRE(Site Reliability Engineering)。负责维护并确保整个服务的高可用性,同时不断优化系统架构、提升部署效率、优化资源利用率提高整体的ROI. 运维工程师…

ATE测试工程师的前景怎么样?能转DFT工程师吗?

最近后台不少同学私信想要咨询ATE这个岗位,想了解这个岗位的薪资,前景,以及相关的技能,下面就来一起了解一下~ 什么是ATE? ATE是(Automatic Test Equipment)的缩写, 于半导体产业意…

年薪20-65W|瓦特曼3D感知、图像、机器人、无人机算法工程师等岗位招聘

瓦特曼智能算法研发岗位火热招募中 公司官网:www.wattman.cn 福利待遇: 入职七险一金(全额基数),绩效奖、项目奖、年终奖、员工评优、期权激励通通都有,年假、司龄假、孝亲假也都齐全,除此之外还…

38张IT工程师技能图谱

所有图片均来自网络。 高清图片下载链接:https://download.csdn.net/download/bluehawksky/11214937 百度网盘:https://pan.baidu.com/s/15S_aINgYEOT9lAs25oo1lQ 提取码: 9xbm 1.1 架构师图谱 1.2 Java架构师图谱 1.3 微服务架构秘籍 1.4 一致性图谱…

售前工程师工作内幕揭秘:面试实战技巧

售前工程师工作内幕揭秘:面试实战技巧 前言一、售前面试问题,基本就下面这些二、售前工程师岗位普遍误区三、售前工程师核心技能四、面试中,主动出击,才是王道五、对行业的了解是做好售前的基础 前言 看到网上很多关于售前工程师…

职位介绍之硬件工程师(提升宝典)

笔者电子信息专业硕士毕业,获得过多次电子设计大赛、大学生智能车、数学建模国奖,现就职于南京某半导体芯片公司,从事与硬件设计,电路设计研究。对于学电子的小伙伴,深知入门的不易,特开次博客交流分享经验…

统计字符串中每个字符出现的频率

基本实现&#xff1a; //统计countStr() {var str abcabca;var result {};for (var i 0; i < str.length; i) {//判断result是否有该字符if (result[str[i]]) {result[str[i]];} else {result[str[i]] 1;}}console.log(result, result);}, 优化&#xff1a; //统计 co…

2500个常用中文字符 + 130常用中英文字符

参考自 《现代汉语常用字表》常用字(2500字) 常用字符 一乙二十丁厂七卜人入八九几儿了力乃刀又三于干亏士工土才寸下大丈与万上小口巾山千乞川亿个勺久凡及夕丸么广亡门义之尸弓己已子卫也女飞刃习叉马乡丰王井开夫天无元专云扎艺木五支厅不太犬区历尤友匹车巨牙屯比互切瓦止…

7-6 统计字符出现次数 (20 分)

7-6 统计字符出现次数 (20 分) 本题要求编写程序&#xff0c;统计并输出某给定字符在给定字符串中出现的次数。 输入格式&#xff1a; 输入第一行给出一个以回车结束的字符串&#xff08;少于80个字符&#xff09;&#xff1b;第二行输入一个字符。 输出格式&#xff1a; …

二月星座运势之射手座:勇敢冒险 寻找新的体验和发现

射手座的人通常是勇敢、自信和乐观的&#xff0c;他们追求自由和独立&#xff0c;喜欢冒险和探索。他们渴望新鲜感和刺激&#xff0c;喜欢寻找新的体验和发现。 对于射手座的人来说&#xff0c;世界充满了未知和神秘&#xff0c;他们总是怀着好奇心和冒险精神&#xff0c;愿意尝…

哪些星座的男生能把女朋友当成宝贝 ?

冠军&#xff08; 双鱼座 &#xff09;&#xff1b;亚军&#xff08; 白羊座 &#xff09;&#xff1b;季军&#xff08; 处女座 &#xff09;&#xff1b; 第4名&#xff08; 水瓶座 &#xff09;&#xff1b; 第5名&#xff08; 金牛座 &#xff09;&#xff1b; 第六名&…