文檔
- https://hutool.cn/docs/#/crypto/概述
重點(diǎn)單詞:
symmetric [s?'metr?k] adj. 對(duì)稱的
asymmetric [?e?s??metr?k] adj. 不對(duì)稱
digest [da??d?est] n. 摘要
摘自文檔
加密分為三種:
對(duì)稱加密(symmetric),例如:AES、DES等
非對(duì)稱加密(asymmetric),例如:RSA、DSA等
摘要加密(digest),例如:MD5、SHA-1、SHA-256、HMAC等
hutool-crypto針對(duì)這三種加密類型分別封裝,并提供常用的大部分加密算法。
對(duì)于非對(duì)稱加密,實(shí)現(xiàn)了:
RSA
DSA
對(duì)于對(duì)稱加密,實(shí)現(xiàn)了:
AES
ARCFOUR
Blowfish
DES
DESede
RC2
PBEWithMD5AndDES
PBEWithSHA1AndDESede
PBEWithSHA1AndRC2_40
對(duì)于摘要算法實(shí)現(xiàn)了:
MD2
MD5
SHA-1
SHA-256
SHA-384
SHA-512
HmacMD5
HmacSHA1
HmacSHA256
HmacSHA384
HmacSHA512
其中,針對(duì)常用到的算法,模塊還提供SecureUtil工具類用于快速實(shí)現(xiàn)加密。
依賴
<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、對(duì)稱加密 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);
// 明文
}
}
這里有個(gè)問題,如果秘鑰長(zhǎng)度不夠16位,會(huì)報(bào)錯(cuò)
Exception in thread "main" cn.hutool.crypto.CryptoException:
InvalidKeyException: Invalid AES key length: 15 bytes
長(zhǎng)度只能是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文章來源:http://www.zghlxwxcb.cn/news/detail-601136.html
3、不對(duì)稱加密 asymmetric
以RSA為例文章來源地址http://www.zghlxwxcb.cn/news/detail-601136.html
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 = "明文";
// 當(dāng)使用無參構(gòu)造方法時(shí),Hutool將自動(dòng)生成隨機(jī)的公鑰私鑰密鑰對(duì):
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);
// 明文
}
}
到了這里,關(guān)于Java:Hutool工具箱之Hutool-crypto加密解密的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!