Mave依赖
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.6.5</version>
</dependency>
hutool简介
hutool提供了如下几个核心组件:
|
组件 |
说明 |
hutool-core |
核心,包括Bean操作、日期、各种Util等 |
hutool-aop |
JDK动态代理封装,提供非IOC下的切面支持 |
hutool-bloomFilter |
布隆过滤,提供一些Hash算法的布隆过滤 |
hutool-cache |
缓存 |
hutool-cron |
定时任务模块,提供类Crontab表达式的定时任务 |
hutool-crypto |
加密解密模块 |
hutool-db |
JDBC封装后的数据操作,基于ActiveRecord思想 |
hutool-dfa |
基于DFA模型的多关键字查找 |
hutool-extra |
扩展模块,对第三方封装(模板引擎、邮件等) |
hutool-http |
基于HttpUrlConnection的Http客户端封装 |
hutool-log |
自动识别日志实现的日志门面 |
hutool-script |
脚本执行封装,例如Javascript |
hutool-setting |
功能更强大的Setting配置文件和Properties封装 |
hutool-system |
系统参数调用封装(JVM信息等) |
hutool-json |
JSON实现 |
hutool-captcha |
图片验证码实现 |
示例:Hutool加解密
public class CryptoTest {
//摘要加密算法
@Test
public void fun1() {
//获取摘要
//MD5
String testStr = "5393554e94bf0eb6436f240a4fd71282";
//方式一
Digester md5 = new Digester(DigestAlgorithm.MD5);
String str = md5.digestHex(testStr);
System.out.println(str); //c3b68dca7f530043db5590f8c5e53a1a
//方式二
String string = DigestUtil.md5Hex(testStr);
System.out.println(string); //c3b68dca7f530043db5590f8c5e53a1a
}
//非对称加密
@Test
public void fun2() {
//非对称加密
RSA rsa = new RSA();
//获得私钥
rsa.getPrivateKey();
rsa.getPrivateKeyBase64();
//获得公钥
rsa.getPublicKey();
rsa.getPublicKeyBase64();
//公钥加密,私钥加密
byte[] encrypt = rsa.encrypt(StrUtil.bytes("RAS测试", CharsetUtil.CHARSET_UTF_8), KeyType.PublicKey);
byte[] decrypt = rsa.decrypt(encrypt, KeyType.PrivateKey);
String encode = Base64.encode(decrypt);
System.out.println(encode); //UkFT5rWL6K+V
//单元测试
// Assert.assertEquals("我是一段测试aaaa", StrUtil.str(decrypt, CharsetUtil.UTF_8));
//私钥加密,公钥解密
byte[] encrypt2 = rsa.encrypt(StrUtil.bytes("RAS测试", CharsetUtil.CHARSET_UTF_8), KeyType.PrivateKey);
byte[] decrypt2 = rsa.decrypt(encrypt2, KeyType.PublicKey);
String encode2 = Base64.encode(decrypt2);
System.out.println(encode2); //UkFT5rWL6K+V
}
@Test
public void fun4(){
String content ="asdf1234";
byte[] key = "hahaaha".getBytes();
//构建
SymmetricCrypto aes = new SymmetricCrypto(SymmetricAlgorithm.AES, key);
//加密
byte[] encrypt = aes.encrypt(content);
//解密
byte[] decrypt = aes.decrypt(encrypt);
}
//对称加密
@Test
public void fun3() {
//第一种:以AES算法
String content = "test中文";
//随机生成密钥
byte[] key = SecureUtil.generateKey(SymmetricAlgorithm.AES.getValue()).getEncoded();
//构建
SymmetricCrypto aes = new SymmetricCrypto(SymmetricAlgorithm.AES, key);
//加密
byte[] encrypt = aes.encrypt(content);
//解密
byte[] decrypt = aes.decrypt(encrypt);
//加密16进制表示
String encryptHex = aes.encryptHex(content);
System.out.println("AES加密16进制表示:" + encryptHex); //46953def8ec02e21f7c9bb4405243a70
//解密为字符串
String decryptStr = aes.decryptStr(encryptHex, CharsetUtil.CHARSET_UTF_8);
System.out.println("AES解密为字符串:" + decryptStr); //test中文
//第二种 DESede加密
String content2 = "test中文";
byte[] key2 = SecureUtil.generateKey(SymmetricAlgorithm.DESede.getValue()).getEncoded();
SymmetricCrypto des = new SymmetricCrypto(SymmetricAlgorithm.DESede, key2);
//加密
byte[] encrypt2 = des.encrypt(content2);
//解密
byte[] decrypt2 = des.decrypt(encrypt2);
//加密为16进制字符串(Hex表示)
String encryptHex2 = des.encryptHex(content2);
System.out.println("DESede加密16进制表示:" + encryptHex2); //fcedfe2478d3e65b1a525d60676a6d88
String decryptStr2 = des.decryptStr(encryptHex2);
System.out.println("DESede解密为字符串:" + decryptStr2); //test中文
//第三种AES封装
String content3 = "test中文";
//随机生成密钥
byte[] key3 = SecureUtil.generateKey(SymmetricAlgorithm.AES.getValue()).getEncoded();
//构建
AES aes3 = SecureUtil.aes(key3);
//加密
byte[] encrypt3 = aes3.encrypt(content3);
//解密
byte[] decrypt3 = aes3.decrypt(encrypt3);
//加密为16进制表示
String encryptHex3 = aes3.encryptHex(content3);
System.out.println("AES封装加密16进制表示:" + encryptHex3); //7300c26ae4081f9d9bd2395b9390f9ec
//解密为字符串
String decryptStr3 = aes3.decryptStr(encryptHex3, CharsetUtil.CHARSET_UTF_8);
System.out.println("AES封装解密为字符串:" + decryptStr3); //test中文
}
}