Java:Hutool工具箱之Hutool-crypto加密解密
文档
- https://hutool.cn/docs/#/crypto/概述
目录
- 1、摘要算法 digest
- 2、对称加密 symmetric
- 3、不对称加密 asymmetric
重点单词:
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为例
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加密解密相关推荐
- java rsa 117_java实现RSA非对称加密解密
之前写过一篇java实现AES对称加密解密 在对密码加密传输的场景下 RSA非对称加密解密可能会更加适合. 原理就是后台生成一对公钥和私钥,公钥给前端用来加密,后台用私钥去解密,保证了传输过程中就算被 ...
- oracle加密可以跟java一致吗,在GBase 8s上使用java udr实现Oracle兼容的加密解密功能...
最近碰到客户从Oracle迁移到GBase 8s使用到字段加密解密功能,使用到了Utl_raw.cast_to_varchar2.Utl_raw.cast_to_raw.Utl_encode.base ...
- java rsa 验_Java使用RSA加密解密签名及校验
RSA加密解密类: package com.ihep; import java.io.BufferedReader; import java.io.BufferedWriter; import jav ...
- JAVA与PHP之间进行aes加密解密
aes加密解密过程 用户数据应经过加密再传输,此文档为aes128加密(cbc模式)的说明 摘要算法为SHA-512 加密: 生成16位iv向量,使用该iv以及密钥加密原文 将加密后的真实密文与iv拼 ...
- java rsa签名_Java使用RSA加密解密签名及校验
由于项目要用到非对称加密解密签名校验什么的,于是参考<Java加密解密的艺术>写一个RSA进行加密解密签名及校验的Demo,代码很简单,特此分享! 一.项目截图 代码下载后,导入到ecli ...
- 基于Python实现的CTF Crypto加密解密工具
纯小白,记录一下自己小学期内做的项目.基于Python实现一个能够对凯撒密码.维吉尼亚密码.栅栏密码.摩斯密码.Base64编码.Ascii编码.AES.DES.RSA.RC4的加密解密以及维吉尼亚密 ...
- as3 crypto 加密解密des,rsa
des实例: <?xml version="1.0″ encoding="utf-8″?> <s:Application xmlns:fx="http: ...
- java pkcs8格式的私钥_RSA加密解密中pkcs1与pkcs8格式私钥互相转换
net,ios中rsa加解密使用的是pkcs1,而java使用的是pkcs8 如果是按1024取模(通常都是1024),pkcs1格式的私钥长度应该是812.如果是pkcs8的格式的密钥长度为861. ...
- java请求url加密_SpringCloud-Config通过Java访问URL对敏感词加密解密
特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...
- java rsa内容超长_RSA 非对称加密解密,超长字符串分块处理
class RsaServer { /** * @var false|resource */ protected $key; /** * 分隔符 * @var string */ protected ...
最新文章
- 5.15 pymysql 模块
- [翻译]编写高性能 .NET 代码 第一章:工具介绍 -- Visual Studio
- 【dfs】【hash】有趣的英语角(2015特长生 T2/luogu 1019)
- break、continue、return的区别
- zabbix安装教程
- ant nutch mysql_ant编译apache-nutch-2.2.1结合mysql实现爬虫的安装配置全过程
- linux postgresql 创建数据库,第 23 课 PostgreSQL 创建自己的数据库、模式、用户
- oeasy教您玩转vim - 43 - # 替换模式
- 大话转岗 PHP 开发小结
- Android---简易的底部导航栏
- 详解目标检测的评价指标
- Adobe Flash player Activex控件问题解决方法
- JavaScript专题(三)防抖
- 万兴剪刀手去水印教程_万兴神剪手怎么去水印教程_赶快收藏吧
- 【大数据】 大数据计算系统
- 计算机核心论文投稿的一点碎碎念
- lazy(懒加载)模式和异步加载模式详解
- 一个比较全的vim指令记录
- 电脑桌面计算机怎么设置,示例win7电脑桌面图片怎么设置
- 内部表和外部表区别和详解
热门文章
- 神经网络第一篇——感受野的学习、计算与思考
- ubuntu deepin-wine 微信之后打不开
- 正则表达式三 不捕获文本 前瞻后顾 否定前瞻 否定后顾 贪婪匹配 懒惰匹配
- iOS 逆向 越狱手机如何安装老版本微信
- 富途量化交易接口使用什么语言编程?
- D3D9学习笔记之顶点缓存与索引缓存
- 帮谷歌推广Webp图片格式之:Webp的格式转换
- springboot打包错误:Failed to execute goal org.apache.maven.pluginsmaven-resources-plugin3.2.0
- Amazon Alexa系列介绍(1)--综述
- 验证码识别-Java版