1、导入pom依赖
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-crypto</artifactId>
<version>5.7.15</version>
</dependency>
2、测试案例
import cn.hutool.crypto.Mode;
import cn.hutool.crypto.Padding;
import cn.hutool.crypto.symmetric.AES;
import cn.hutool.crypto.symmetric.DES;
import org.junit.jupiter.api.Test;
public class SymmetricCryptoTest {
/**
* DES 模式
*/
@Test
public void des() {
String text = "HelloWorld";
// key:DES模式下,key必须为8位
String key = "12345678";
// iv:偏移量,ECB模式不需要,CBC模式下必须为8位
String iv = "12345678";
// DES des = new DES(Mode.ECB, Padding.PKCS5Padding, key.getBytes());
DES des = new DES(Mode.CBC, Padding.PKCS5Padding, key.getBytes(), iv.getBytes());
String encrypt = des.encryptBase64(text);
System.out.println(encrypt);
String decrypt = des.decryptStr(encrypt);
System.out.println(decrypt);
}
/**
* AES 模式
*/
@Test
public void aes() {
String text = "HelloWorld";
// key:AES模式下,key必须为16位
String key = "1234567812345678";
// iv:偏移量,ECB模式不需要,CBC模式下必须为16位
String iv = "1234567812345678";
// AES aes = new AES(Mode.ECB, Padding.PKCS5Padding, key.getBytes());
AES aes = new AES(Mode.CBC, Padding.PKCS5Padding, key.getBytes(), iv.getBytes());
// 加密并进行Base转码
String encrypt = aes.encryptBase64(text);
System.out.println(encrypt);
// 解密为字符串
String decrypt = aes.decryptStr(encrypt);
System.out.println(decrypt);
}
}
3、加密介绍
- 从加解密使用的密钥是否相同的角度看,加密方式可以分为两种,对称加密(相同)和非对称加密(不同)。而根据加密后是否可逆,可分为可逆加密和不可逆加密,对称和非对称加密都属于可逆,摘要加密则是不可逆。
3.1 对称加密
- 对称加密涉及三个常见概念,加密算法、加密模式 和 填充模式
- 常见加密算法:DES 和 AES。
- 常见加密模式:ECB 和 ECB。
- 常见填充模式:NoPadding 和 PKCS5Padding。
3.2 非对称加密
- 与对称加密算法不同,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)
- 常见加密算法:RSA 和 ECC。
3.3 摘要加密
- 由一个单向Hash加密函数对消息进行作用而产生,唯一对应一个消息或文本的固定长度的值。
- 常见加密算法:MD5、SHA1、SHA256、SHA512
参考链接:Java使用Hutool工具完成加密解密_digesthex-CSDN博客