文档
目录
重点单词:
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}; }
参考
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); // 明文 } }