fix comment

This commit is contained in:
Looly
2019-10-08 18:16:30 +08:00
parent 1364656855
commit 0685a8a141
55 changed files with 2334 additions and 2106 deletions

View File

@@ -30,7 +30,7 @@ import cn.hutool.core.util.StrUtil;
/**
* Bouncy Castle相关工具类封装
*
*
* @author looly
* @since 4.5.0
*/
@@ -38,7 +38,7 @@ public class BCUtil {
/**
* 编码压缩EC公钥基于BouncyCastle<br>
* 见https://www.cnblogs.com/xinzhao/p/8963724.html
*
*
* @param publicKey {@link PublicKey}必须为org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPublicKey
* @return 压缩得到的X
* @since 4.4.4
@@ -50,9 +50,10 @@ public class BCUtil {
/**
* 解码恢复EC压缩公钥,支持Base64和Hex编码,基于BouncyCastle<br>
* 见https://www.cnblogs.com/xinzhao/p/8963724.html
*
* @param encode 压缩公钥
*
* @param encode 压缩公钥
* @param curveName EC曲线名
* @return 公钥
* @since 4.4.4
*/
public static PublicKey decodeECPoint(String encode, String curveName) {
@@ -62,9 +63,10 @@ public class BCUtil {
/**
* 解码恢复EC压缩公钥,支持Base64和Hex编码,基于BouncyCastle<br>
* 见https://www.cnblogs.com/xinzhao/p/8963724.html
*
*
* @param encodeByte 压缩公钥
* @param curveName EC曲线名例如{@link KeyUtil#SM2_DEFAULT_CURVE}
* @param curveName EC曲线名例如{@link KeyUtil#SM2_DEFAULT_CURVE}
* @return 公钥
* @since 4.4.4
*/
public static PublicKey decodeECPoint(byte[] encodeByte, String curveName) {
@@ -90,7 +92,7 @@ public class BCUtil {
/**
* 读取PEM格式的私钥
*
*
* @param pemStream pem流
* @return {@link PrivateKey}
* @since 4.5.2
@@ -101,14 +103,14 @@ public class BCUtil {
/**
* 读取PEM格式的公钥
*
*
* @param pemStream pem流
* @return {@link PublicKey}
* @since 4.5.2
*/
public static PublicKey readPublicKey(InputStream pemStream) {
final Certificate certificate = KeyUtil.readX509Certificate(pemStream);
if(null == certificate) {
if (null == certificate) {
return null;
}
return certificate.getPublicKey();
@@ -117,7 +119,7 @@ public class BCUtil {
/**
* 从pem文件中读取公钥或私钥<br>
* 根据类型返回{@link PublicKey} 或者 {@link PrivateKey}
*
*
* @param keyStream pem流
* @return {@link Key}
* @since 4.5.2
@@ -134,7 +136,7 @@ public class BCUtil {
/**
* 从pem文件中读取公钥或私钥
*
*
* @param keyStream pem流
* @return 密钥bytes
* @since 4.5.2
@@ -149,7 +151,7 @@ public class BCUtil {
/**
* 读取pem文件中的信息包括类型、头信息和密钥内容
*
*
* @param keyStream pem流
* @return {@link PemObject}
* @since 4.5.2

View File

@@ -588,6 +588,7 @@ public class KeyUtil {
/**
* 获取主体算法名例如RSA/ECB/PKCS1Padding的主体算法是RSA
*
* @param algorithm XXXwithXXX算法
* @return 主体算法名
* @since 4.5.2
*/
@@ -823,6 +824,7 @@ public class KeyUtil {
*
* @param encode 压缩公钥
* @param curveName EC曲线名
* @return 公钥
* @since 4.4.4
*/
public static PublicKey decodeECPoint(String encode, String curveName) {
@@ -835,6 +837,7 @@ public class KeyUtil {
*
* @param encodeByte 压缩公钥
* @param curveName EC曲线名
* @return 公钥
* @since 4.4.4
*/
public static PublicKey decodeECPoint(byte[] encodeByte, String curveName) {

View File

@@ -48,15 +48,14 @@ import cn.hutool.crypto.symmetric.SymmetricCrypto;
* 1、对称加密symmetric例如AES、DES等<br>
* 2、非对称加密asymmetric例如RSA、DSA等<br>
* 3、摘要加密digest例如MD5、SHA-1、SHA-256、HMAC等<br>
*
* @author xiaoleilu, Gsealy
*
* @author xiaoleilu, Gsealy
*/
public final class SecureUtil {
/**
* 默认密钥字节数
*
*
* <pre>
* RSA/DSA
* Default Keysize 1024
@@ -67,7 +66,7 @@ public final class SecureUtil {
/**
* 生成 {@link SecretKey},仅用于对称加密和摘要算法密钥生成
*
*
* @param algorithm 算法支持PBE算法
* @return {@link SecretKey}
*/
@@ -77,9 +76,9 @@ public final class SecureUtil {
/**
* 生成 {@link SecretKey},仅用于对称加密和摘要算法密钥生成
*
*
* @param algorithm 算法支持PBE算法
* @param keySize 密钥长度
* @param keySize 密钥长度
* @return {@link SecretKey}
* @since 3.1.2
*/
@@ -89,9 +88,9 @@ public final class SecureUtil {
/**
* 生成 {@link SecretKey},仅用于对称加密和摘要算法密钥生成
*
*
* @param algorithm 算法
* @param key 密钥,如果为{@code null} 自动生成随机密钥
* @param key 密钥,如果为{@code null} 自动生成随机密钥
* @return {@link SecretKey}
*/
public static SecretKey generateKey(String algorithm, byte[] key) {
@@ -100,9 +99,9 @@ public final class SecureUtil {
/**
* 生成 {@link SecretKey}
*
*
* @param algorithm DES算法包括DES、DESede等
* @param key 密钥
* @param key 密钥
* @return {@link SecretKey}
*/
public static SecretKey generateDESKey(String algorithm, byte[] key) {
@@ -111,9 +110,9 @@ public final class SecureUtil {
/**
* 生成PBE {@link SecretKey}
*
*
* @param algorithm PBE算法包括PBEWithMD5AndDES、PBEWithSHA1AndDESede、PBEWithSHA1AndRC2_40等
* @param key 密钥
* @param key 密钥
* @return {@link SecretKey}
*/
public static SecretKey generatePBEKey(String algorithm, char[] key) {
@@ -122,9 +121,9 @@ public final class SecureUtil {
/**
* 生成 {@link SecretKey},仅用于对称加密和摘要算法
*
*
* @param algorithm 算法
* @param keySpec {@link KeySpec}
* @param keySpec {@link KeySpec}
* @return {@link SecretKey}
*/
public static SecretKey generateKey(String algorithm, KeySpec keySpec) {
@@ -134,9 +133,9 @@ public final class SecureUtil {
/**
* 生成私钥,仅用于非对称加密<br>
* 算法见https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#KeyFactory
*
*
* @param algorithm 算法
* @param key 密钥
* @param key 密钥
* @return 私钥 {@link PrivateKey}
*/
public static PrivateKey generatePrivateKey(String algorithm, byte[] key) {
@@ -146,9 +145,9 @@ public final class SecureUtil {
/**
* 生成私钥,仅用于非对称加密<br>
* 算法见https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#KeyFactory
*
*
* @param algorithm 算法
* @param keySpec {@link KeySpec}
* @param keySpec {@link KeySpec}
* @return 私钥 {@link PrivateKey}
* @since 3.1.1
*/
@@ -158,9 +157,9 @@ public final class SecureUtil {
/**
* 生成私钥,仅用于非对称加密
*
*
* @param keyStore {@link KeyStore}
* @param alias 别名
* @param alias 别名
* @param password 密码
* @return 私钥 {@link PrivateKey}
*/
@@ -171,9 +170,9 @@ public final class SecureUtil {
/**
* 生成公钥,仅用于非对称加密<br>
* 算法见https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#KeyFactory
*
*
* @param algorithm 算法
* @param key 密钥
* @param key 密钥
* @return 公钥 {@link PublicKey}
*/
public static PublicKey generatePublicKey(String algorithm, byte[] key) {
@@ -183,9 +182,9 @@ public final class SecureUtil {
/**
* 生成公钥,仅用于非对称加密<br>
* 算法见https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#KeyFactory
*
*
* @param algorithm 算法
* @param keySpec {@link KeySpec}
* @param keySpec {@link KeySpec}
* @return 公钥 {@link PublicKey}
* @since 3.1.1
*/
@@ -196,7 +195,7 @@ public final class SecureUtil {
/**
* 生成用于非对称加密的公钥和私钥,仅用于非对称加密<br>
* 密钥对生成算法见https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#KeyPairGenerator
*
*
* @param algorithm 非对称加密算法
* @return {@link KeyPair}
*/
@@ -207,9 +206,9 @@ public final class SecureUtil {
/**
* 生成用于非对称加密的公钥和私钥<br>
* 密钥对生成算法见https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#KeyPairGenerator
*
*
* @param algorithm 非对称加密算法
* @param keySize 密钥模modulus )长度
* @param keySize 密钥模modulus )长度
* @return {@link KeyPair}
*/
public static KeyPair generateKeyPair(String algorithm, int keySize) {
@@ -219,10 +218,10 @@ public final class SecureUtil {
/**
* 生成用于非对称加密的公钥和私钥<br>
* 密钥对生成算法见https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#KeyPairGenerator
*
*
* @param algorithm 非对称加密算法
* @param keySize 密钥模modulus )长度
* @param seed 种子
* @param keySize 密钥模modulus )长度
* @param seed 种子
* @return {@link KeyPair}
*/
public static KeyPair generateKeyPair(String algorithm, int keySize, byte[] seed) {
@@ -232,9 +231,9 @@ public final class SecureUtil {
/**
* 生成用于非对称加密的公钥和私钥<br>
* 密钥对生成算法见https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#KeyPairGenerator
*
*
* @param algorithm 非对称加密算法
* @param params {@link AlgorithmParameterSpec}
* @param params {@link AlgorithmParameterSpec}
* @return {@link KeyPair}
* @since 4.3.3
*/
@@ -245,10 +244,10 @@ public final class SecureUtil {
/**
* 生成用于非对称加密的公钥和私钥<br>
* 密钥对生成算法见https://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#KeyPairGenerator
*
*
* @param algorithm 非对称加密算法
* @param seed 种子
* @param params {@link AlgorithmParameterSpec}
* @param seed 种子
* @param params {@link AlgorithmParameterSpec}
* @return {@link KeyPair}
* @since 4.3.3
*/
@@ -259,7 +258,7 @@ public final class SecureUtil {
/**
* 获取用于密钥生成的算法<br>
* 获取XXXwithXXX算法的后半部分算法如果为ECDSA或SM2返回算法为EC
*
*
* @param algorithm XXXwithXXX算法
* @return 算法
*/
@@ -269,9 +268,9 @@ public final class SecureUtil {
/**
* 生成算法格式为XXXwithXXX
*
*
* @param asymmetricAlgorithm 非对称算法
* @param digestAlgorithm 摘要算法
* @param digestAlgorithm 摘要算法
* @return 算法
* @since 4.4.1
*/
@@ -282,9 +281,9 @@ public final class SecureUtil {
/**
* 生成签名对象,仅用于非对称加密
*
*
* @param asymmetricAlgorithm {@link AsymmetricAlgorithm} 非对称加密算法
* @param digestAlgorithm {@link DigestAlgorithm} 摘要算法
* @param digestAlgorithm {@link DigestAlgorithm} 摘要算法
* @return {@link Signature}
*/
public static Signature generateSignature(AsymmetricAlgorithm asymmetricAlgorithm, DigestAlgorithm digestAlgorithm) {
@@ -299,8 +298,8 @@ public final class SecureUtil {
* 读取密钥库(Java Key StoreJKS) KeyStore文件<br>
* KeyStore文件用于数字证书的密钥对保存<br>
* see: http://snowolf.iteye.com/blog/391931
*
* @param in {@link InputStream} 如果想从文件读取.keystore文件使用 {@link FileUtil#getInputStream(java.io.File)} 读取
*
* @param in {@link InputStream} 如果想从文件读取.keystore文件使用 {@link FileUtil#getInputStream(java.io.File)} 读取
* @param password 密码
* @return {@link KeyStore}
*/
@@ -312,9 +311,9 @@ public final class SecureUtil {
* 读取KeyStore文件<br>
* KeyStore文件用于数字证书的密钥对保存<br>
* see: http://snowolf.iteye.com/blog/391931
*
* @param type 类型
* @param in {@link InputStream} 如果想从文件读取.keystore文件使用 {@link FileUtil#getInputStream(java.io.File)} 读取
*
* @param type 类型
* @param in {@link InputStream} 如果想从文件读取.keystore文件使用 {@link FileUtil#getInputStream(java.io.File)} 读取
* @param password 密码
* @return {@link KeyStore}
*/
@@ -326,10 +325,10 @@ public final class SecureUtil {
* 读取X.509 Certification文件<br>
* Certification为证书文件<br>
* see: http://snowolf.iteye.com/blog/391931
*
* @param in {@link InputStream} 如果想从文件读取.cer文件使用 {@link FileUtil#getInputStream(java.io.File)} 读取
*
* @param in {@link InputStream} 如果想从文件读取.cer文件使用 {@link FileUtil#getInputStream(java.io.File)} 读取
* @param password 密码
* @param alias 别名
* @param alias 别名
* @return {@link KeyStore}
* @since 4.4.1
*/
@@ -341,7 +340,7 @@ public final class SecureUtil {
* 读取X.509 Certification文件<br>
* Certification为证书文件<br>
* see: http://snowolf.iteye.com/blog/391931
*
*
* @param in {@link InputStream} 如果想从文件读取.cer文件使用 {@link FileUtil#getInputStream(java.io.File)} 读取
* @return {@link KeyStore}
* @since 4.4.1
@@ -354,11 +353,11 @@ public final class SecureUtil {
* 读取Certification文件<br>
* Certification为证书文件<br>
* see: http://snowolf.iteye.com/blog/391931
*
* @param type 类型例如X.509
* @param in {@link InputStream} 如果想从文件读取.cer文件使用 {@link FileUtil#getInputStream(java.io.File)} 读取
*
* @param type 类型例如X.509
* @param in {@link InputStream} 如果想从文件读取.cer文件使用 {@link FileUtil#getInputStream(java.io.File)} 读取
* @param password 密码
* @param alias 别名
* @param alias 别名
* @return {@link KeyStore}
* @since 4.4.1
*/
@@ -370,9 +369,9 @@ public final class SecureUtil {
* 读取Certification文件<br>
* Certification为证书文件<br>
* see: http://snowolf.iteye.com/blog/391931
*
*
* @param type 类型例如X.509
* @param in {@link InputStream} 如果想从文件读取.cer文件使用 {@link FileUtil#getInputStream(java.io.File)} 读取
* @param in {@link InputStream} 如果想从文件读取.cer文件使用 {@link FileUtil#getInputStream(java.io.File)} 读取
* @return {@link Certificate}
*/
public static Certificate readCertificate(String type, InputStream in) {
@@ -381,9 +380,9 @@ public final class SecureUtil {
/**
* 获得 Certification
*
*
* @param keyStore {@link KeyStore}
* @param alias 别名
* @param alias 别名
* @return {@link Certificate}
*/
public static Certificate getCertificate(KeyStore keyStore, String alias) {
@@ -395,12 +394,12 @@ public final class SecureUtil {
/**
* AES加密生成随机KEY。注意解密时必须使用相同 {@link AES}对象或者使用相同KEY<br>
* 例:
*
*
* <pre>
* AES加密aes().encrypt(data)
* AES解密aes().decrypt(data)
* </pre>
*
*
* @return {@link AES}
*/
public static AES aes() {
@@ -410,12 +409,12 @@ public final class SecureUtil {
/**
* AES加密<br>
* 例:
*
*
* <pre>
* AES加密aes(key).encrypt(data)
* AES解密aes(key).decrypt(data)
* </pre>
*
*
* @param key 密钥
* @return {@link SymmetricCrypto}
*/
@@ -426,12 +425,12 @@ public final class SecureUtil {
/**
* DES加密生成随机KEY。注意解密时必须使用相同 {@link DES}对象或者使用相同KEY<br>
* 例:
*
*
* <pre>
* DES加密des().encrypt(data)
* DES解密des().decrypt(data)
* </pre>
*
*
* @return {@link DES}
*/
public static DES des() {
@@ -441,12 +440,12 @@ public final class SecureUtil {
/**
* DES加密<br>
* 例:
*
*
* <pre>
* DES加密des(key).encrypt(data)
* DES解密des(key).decrypt(data)
* </pre>
*
*
* @param key 密钥
* @return {@link DES}
*/
@@ -458,12 +457,12 @@ public final class SecureUtil {
* DESede加密又名3DES、TripleDES生成随机KEY。注意解密时必须使用相同 {@link DESede}对象或者使用相同KEY<br>
* Java中默认实现为DESede/ECB/PKCS5Padding<br>
* 例:
*
*
* <pre>
* DESede加密desede().encrypt(data)
* DESede解密desede().decrypt(data)
* </pre>
*
*
* @return {@link DESede}
* @since 3.3.0
*/
@@ -475,12 +474,12 @@ public final class SecureUtil {
* DESede加密又名3DES、TripleDES<br>
* Java中默认实现为DESede/ECB/PKCS5Padding<br>
* 例:
*
*
* <pre>
* DESede加密desede(key).encrypt(data)
* DESede解密desede(key).decrypt(data)
* </pre>
*
*
* @param key 密钥
* @return {@link DESede}
* @since 3.3.0
@@ -490,15 +489,16 @@ public final class SecureUtil {
}
// ------------------------------------------------------------------- 摘要算法
/**
* MD5加密<br>
* 例:
*
*
* <pre>
* MD5加密md5().digest(data)
* MD5加密并转为16进制字符串md5().digestHex(data)
* </pre>
*
*
* @return {@link Digester}
*/
public static MD5 md5() {
@@ -507,7 +507,7 @@ public final class SecureUtil {
/**
* MD5加密生成16进制MD5字符串<br>
*
*
* @param data 数据
* @return MD5字符串
*/
@@ -517,7 +517,7 @@ public final class SecureUtil {
/**
* MD5加密生成16进制MD5字符串<br>
*
*
* @param data 数据
* @return MD5字符串
*/
@@ -527,7 +527,7 @@ public final class SecureUtil {
/**
* MD5加密文件生成16进制MD5字符串<br>
*
*
* @param dataFile 被加密文件
* @return MD5字符串
*/
@@ -540,7 +540,7 @@ public final class SecureUtil {
* 例:<br>
* SHA1加密sha1().digest(data)<br>
* SHA1加密并转为16进制字符串sha1().digestHex(data)<br>
*
*
* @return {@link Digester}
*/
public static Digester sha1() {
@@ -549,7 +549,7 @@ public final class SecureUtil {
/**
* SHA1加密生成16进制SHA1字符串<br>
*
*
* @param data 数据
* @return SHA1字符串
*/
@@ -559,7 +559,7 @@ public final class SecureUtil {
/**
* SHA1加密生成16进制SHA1字符串<br>
*
*
* @param data 数据
* @return SHA1字符串
*/
@@ -569,7 +569,7 @@ public final class SecureUtil {
/**
* SHA1加密文件生成16进制SHA1字符串<br>
*
*
* @param dataFile 被加密文件
* @return SHA1字符串
*/
@@ -582,7 +582,7 @@ public final class SecureUtil {
* 例:<br>
* SHA256加密sha256().digest(data)<br>
* SHA256加密并转为16进制字符串sha256().digestHex(data)<br>
*
*
* @return {@link Digester}
* @since 4.3.2
*/
@@ -592,7 +592,7 @@ public final class SecureUtil {
/**
* SHA256加密生成16进制SHA256字符串<br>
*
*
* @param data 数据
* @return SHA256字符串
* @since 4.3.2
@@ -603,7 +603,7 @@ public final class SecureUtil {
/**
* SHA256加密生成16进制SHA256字符串<br>
*
*
* @param data 数据
* @return SHA1字符串
* @since 4.3.2
@@ -614,7 +614,7 @@ public final class SecureUtil {
/**
* SHA256加密文件生成16进制SHA256字符串<br>
*
*
* @param dataFile 被加密文件
* @return SHA256字符串
* @since 4.3.2
@@ -625,9 +625,9 @@ public final class SecureUtil {
/**
* 创建HMac对象调用digest方法可获得hmac值
*
*
* @param algorithm {@link HmacAlgorithm}
* @param key 密钥,如果为<code>null</code>生成随机密钥
* @param key 密钥,如果为<code>null</code>生成随机密钥
* @return {@link HMac}
* @since 3.3.0
*/
@@ -637,9 +637,9 @@ public final class SecureUtil {
/**
* 创建HMac对象调用digest方法可获得hmac值
*
*
* @param algorithm {@link HmacAlgorithm}
* @param key 密钥,如果为<code>null</code>生成随机密钥
* @param key 密钥,如果为<code>null</code>生成随机密钥
* @return {@link HMac}
* @since 3.0.3
*/
@@ -649,9 +649,9 @@ public final class SecureUtil {
/**
* 创建HMac对象调用digest方法可获得hmac值
*
*
* @param algorithm {@link HmacAlgorithm}
* @param key 密钥{@link SecretKey},如果为<code>null</code>生成随机密钥
* @param key 密钥{@link SecretKey},如果为<code>null</code>生成随机密钥
* @return {@link HMac}
* @since 3.0.3
*/
@@ -664,7 +664,7 @@ public final class SecureUtil {
* 例:<br>
* HmacMD5加密hmacMd5(key).digest(data)<br>
* HmacMD5加密并转为16进制字符串hmacMd5(key).digestHex(data)<br>
*
*
* @param key 加密密钥,如果为<code>null</code>生成随机密钥
* @return {@link HMac}
* @since 3.3.0
@@ -678,7 +678,7 @@ public final class SecureUtil {
* 例:<br>
* HmacMD5加密hmacMd5(key).digest(data)<br>
* HmacMD5加密并转为16进制字符串hmacMd5(key).digestHex(data)<br>
*
*
* @param key 加密密钥,如果为<code>null</code>生成随机密钥
* @return {@link HMac}
*/
@@ -691,7 +691,7 @@ public final class SecureUtil {
* 例:<br>
* HmacMD5加密hmacMd5().digest(data)<br>
* HmacMD5加密并转为16进制字符串hmacMd5().digestHex(data)<br>
*
*
* @return {@link HMac}
*/
public static HMac hmacMd5() {
@@ -703,7 +703,7 @@ public final class SecureUtil {
* 例:<br>
* HmacSHA1加密hmacSha1(key).digest(data)<br>
* HmacSHA1加密并转为16进制字符串hmacSha1(key).digestHex(data)<br>
*
*
* @param key 加密密钥,如果为<code>null</code>生成随机密钥
* @return {@link HMac}
* @since 3.3.0
@@ -717,7 +717,7 @@ public final class SecureUtil {
* 例:<br>
* HmacSHA1加密hmacSha1(key).digest(data)<br>
* HmacSHA1加密并转为16进制字符串hmacSha1(key).digestHex(data)<br>
*
*
* @param key 加密密钥,如果为<code>null</code>生成随机密钥
* @return {@link HMac}
*/
@@ -730,7 +730,7 @@ public final class SecureUtil {
* 例:<br>
* HmacSHA1加密hmacSha1().digest(data)<br>
* HmacSHA1加密并转为16进制字符串hmacSha1().digestHex(data)<br>
*
*
* @return {@link HMac}
*/
public static HMac hmacSha1() {
@@ -742,7 +742,7 @@ public final class SecureUtil {
/**
* 创建RSA算法对象<br>
* 生成新的私钥公钥对
*
*
* @return {@link RSA}
* @since 3.0.5
*/
@@ -754,9 +754,9 @@ public final class SecureUtil {
* 创建RSA算法对象<br>
* 私钥和公钥同时为空时生成一对新的私钥和公钥<br>
* 私钥和公钥可以单独传入一个,如此则只能使用此钥匙来做加密或者解密
*
*
* @param privateKeyBase64 私钥Base64
* @param publicKeyBase64 公钥Base64
* @param publicKeyBase64 公钥Base64
* @return {@link RSA}
* @since 3.0.5
*/
@@ -768,9 +768,9 @@ public final class SecureUtil {
* 创建RSA算法对象<br>
* 私钥和公钥同时为空时生成一对新的私钥和公钥<br>
* 私钥和公钥可以单独传入一个,如此则只能使用此钥匙来做加密或者解密
*
*
* @param privateKey 私钥
* @param publicKey 公钥
* @param publicKey 公钥
* @return {@link RSA}
* @since 3.0.5
*/
@@ -781,7 +781,7 @@ public final class SecureUtil {
/**
* 创建签名算法对象<br>
* 生成新的私钥公钥对
*
*
* @param algorithm 签名算法
* @return {@link Sign}
* @since 3.3.0
@@ -794,10 +794,10 @@ public final class SecureUtil {
* 创建签名算法对象<br>
* 私钥和公钥同时为空时生成一对新的私钥和公钥<br>
* 私钥和公钥可以单独传入一个,如此则只能使用此钥匙来做签名或验证
*
* @param algorithm 签名算法
*
* @param algorithm 签名算法
* @param privateKeyBase64 私钥Base64
* @param publicKeyBase64 公钥Base64
* @param publicKeyBase64 公钥Base64
* @return {@link Sign}
* @since 3.3.0
*/
@@ -809,9 +809,10 @@ public final class SecureUtil {
* 创建Sign算法对象<br>
* 私钥和公钥同时为空时生成一对新的私钥和公钥<br>
* 私钥和公钥可以单独传入一个,如此则只能使用此钥匙来做签名或验证
*
*
* @param algorithm 算法枚举
* @param privateKey 私钥
* @param publicKey 公钥
* @param publicKey 公钥
* @return {@link Sign}
* @since 3.3.0
*/
@@ -823,7 +824,7 @@ public final class SecureUtil {
* 对参数做签名<br>
* 参数签名为对Map参数按照key的顺序排序后拼接为字符串然后根据提供的签名算法生成签名字符串<br>
* 拼接后的字符串键值对之间无符号键值对之间无符号忽略null值
*
*
* @param crypto 对称加密算法
* @param params 参数
* @return 签名
@@ -836,12 +837,12 @@ public final class SecureUtil {
/**
* 对参数做签名<br>
* 参数签名为对Map参数按照key的顺序排序后拼接为字符串然后根据提供的签名算法生成签名字符串
*
* @param crypto 对称加密算法
* @param params 参数
* @param separator entry之间的连接符
*
* @param crypto 对称加密算法
* @param params 参数
* @param separator entry之间的连接符
* @param keyValueSeparator kv之间的连接符
* @param isIgnoreNull 是否忽略null的键和值
* @param isIgnoreNull 是否忽略null的键和值
* @return 签名
* @since 4.0.1
*/
@@ -857,7 +858,7 @@ public final class SecureUtil {
* 对参数做md5签名<br>
* 参数签名为对Map参数按照key的顺序排序后拼接为字符串然后根据提供的签名算法生成签名字符串<br>
* 拼接后的字符串键值对之间无符号键值对之间无符号忽略null值
*
*
* @param params 参数
* @return 签名
* @since 4.0.1
@@ -870,7 +871,7 @@ public final class SecureUtil {
* 对参数做Sha1签名<br>
* 参数签名为对Map参数按照key的顺序排序后拼接为字符串然后根据提供的签名算法生成签名字符串<br>
* 拼接后的字符串键值对之间无符号键值对之间无符号忽略null值
*
*
* @param params 参数
* @return 签名
* @since 4.0.8
@@ -883,7 +884,7 @@ public final class SecureUtil {
* 对参数做Sha256签名<br>
* 参数签名为对Map参数按照key的顺序排序后拼接为字符串然后根据提供的签名算法生成签名字符串<br>
* 拼接后的字符串键值对之间无符号键值对之间无符号忽略null值
*
*
* @param params 参数
* @return 签名
* @since 4.0.1
@@ -896,9 +897,9 @@ public final class SecureUtil {
* 对参数做签名<br>
* 参数签名为对Map参数按照key的顺序排序后拼接为字符串然后根据提供的签名算法生成签名字符串<br>
* 拼接后的字符串键值对之间无符号键值对之间无符号忽略null值
*
*
* @param digestAlgorithm 摘要算法
* @param params 参数
* @param params 参数
* @return 签名
* @since 4.0.1
*/
@@ -909,12 +910,12 @@ public final class SecureUtil {
/**
* 对参数做签名<br>
* 参数签名为对Map参数按照key的顺序排序后拼接为字符串然后根据提供的签名算法生成签名字符串
*
* @param digestAlgorithm 摘要算法
* @param params 参数
* @param separator entry之间的连接符
*
* @param digestAlgorithm 摘要算法
* @param params 参数
* @param separator entry之间的连接符
* @param keyValueSeparator kv之间的连接符
* @param isIgnoreNull 是否忽略null的键和值
* @param isIgnoreNull 是否忽略null的键和值
* @return 签名
* @since 4.0.1
*/
@@ -927,9 +928,10 @@ public final class SecureUtil {
}
// ------------------------------------------------------------------- UUID
/**
* 简化的UUID去掉了横线
*
*
* @return 简化的UUID去掉了横线
* @deprecated 请使用 {@link IdUtil#simpleUUID()}
*/
@@ -940,11 +942,11 @@ public final class SecureUtil {
/**
* 增加加密解密的算法提供者,默认优先使用,例如:
*
*
* <pre>
* addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
* </pre>
*
*
* @param provider 算法提供者
* @since 4.1.22
*/
@@ -954,12 +956,12 @@ public final class SecureUtil {
/**
* 解码字符串密钥,可支持的编码如下:
*
*
* <pre>
* 1. Hex16进制编码
* 1. Base64编码
* </pre>
*
*
* @param key 被解码的密钥字符串
* @return 密钥
* @since 4.3.3
@@ -970,8 +972,9 @@ public final class SecureUtil {
/**
* 创建{@link Cipher}
*
*
* @param algorithm 算法
* @return {@link Cipher}
* @since 4.5.2
*/
public static Cipher createCipher(String algorithm) {
@@ -989,8 +992,9 @@ public final class SecureUtil {
/**
* 创建{@link MessageDigest}
*
*
* @param algorithm 算法
* @return {@link MessageDigest}
* @since 4.5.2
*/
public static MessageDigest createMessageDigest(String algorithm) {
@@ -1008,8 +1012,9 @@ public final class SecureUtil {
/**
* 创建{@link Mac}
*
*
* @param algorithm 算法
* @return {@link Mac}
* @since 4.5.13
*/
public static Mac createMac(String algorithm) {
@@ -1027,7 +1032,7 @@ public final class SecureUtil {
/**
* RC4算法
*
*
* @param key 密钥
* @return {@link RC4}
*/
@@ -1037,7 +1042,7 @@ public final class SecureUtil {
/**
* 强制关闭Bouncy Castle库的使用全局有效
*
*
* @since 4.5.2
*/
public static void disableBouncyCastle() {

View File

@@ -150,6 +150,7 @@ public abstract class AbstractAsymmetricCrypto<T extends AbstractAsymmetricCrypt
* 编码为Base64字符串
*
* @param data 被加密的字符串
* @param charset 编码
* @param keyType 私钥或公钥 {@link KeyType}
* @return Base64字符串
* @since 4.0.1

View File

@@ -12,7 +12,7 @@ import cn.hutool.core.util.CharsetUtil;
* 使用方法如下:
* <p>
* <code>
* String pw_hash = BCrypt.hashpw(plain_password, BCrypt.gensalt()); <br />
* String pw_hash = BCrypt.hashpw(plain_password, BCrypt.gensalt());
* </code>
* <p>
* 使用checkpw方法检查被加密的字符串是否与原始字符串匹配
@@ -24,8 +24,8 @@ import cn.hutool.core.util.CharsetUtil;
* gensalt方法提供了可选参数 (log_rounds) 来定义加盐多少,也决定了加密的复杂度:
* <p>
* <code>
* String strong_salt = BCrypt.gensalt(10)<br />
* String stronger_salt = BCrypt.gensalt(12)<br />
* String strong_salt = BCrypt.gensalt(10);
* String stronger_salt = BCrypt.gensalt(12);
* </code>
*
* @author Damien Miller
@@ -192,7 +192,7 @@ public class BCrypt {
* @throws IllegalArgumentException if maxolen is invalid
*/
private static byte[] decodeBase64(String s, int maxolen) throws IllegalArgumentException {
StringBuffer rs = new StringBuffer();
final StringBuilder rs = new StringBuilder();
int off = 0, slen = s.length(), olen = 0;
byte[] ret;
byte c1, c2, c3, c4, o;

View File

@@ -10,16 +10,16 @@ import cn.hutool.core.util.CharsetUtil;
/**
* 摘要算法工具类
*
* @author Looly
*
* @author Looly
*/
public class DigestUtil {
// ------------------------------------------------------------------------------------------- MD5
/**
* 计算32位MD5摘要值
*
*
* @param data 被摘要数据
* @return MD5摘要
*/
@@ -29,8 +29,8 @@ public class DigestUtil {
/**
* 计算32位MD5摘要值
*
* @param data 被摘要数据
*
* @param data 被摘要数据
* @param charset 编码
* @return MD5摘要
*/
@@ -40,7 +40,7 @@ public class DigestUtil {
/**
* 计算32位MD5摘要值使用UTF-8编码
*
*
* @param data 被摘要数据
* @return MD5摘要
*/
@@ -50,7 +50,7 @@ public class DigestUtil {
/**
* 计算32位MD5摘要值
*
*
* @param data 被摘要数据
* @return MD5摘要
*/
@@ -60,7 +60,7 @@ public class DigestUtil {
/**
* 计算32位MD5摘要值
*
*
* @param file 被摘要文件
* @return MD5摘要
*/
@@ -70,7 +70,7 @@ public class DigestUtil {
/**
* 计算32位MD5摘要值并转为16进制字符串
*
*
* @param data 被摘要数据
* @return MD5摘要的16进制表示
*/
@@ -80,19 +80,19 @@ public class DigestUtil {
/**
* 计算32位MD5摘要值并转为16进制字符串
*
* @param data 被摘要数据
*
* @param data 被摘要数据
* @param charset 编码
* @return MD5摘要的16进制表示
*/
public static String md5Hex(String data, String charset) {
return new MD5().digestHex(data, charset);
}
/**
* 计算32位MD5摘要值并转为16进制字符串
*
* @param data 被摘要数据
*
* @param data 被摘要数据
* @param charset 编码
* @return MD5摘要的16进制表示
* @since 4.6.0
@@ -103,7 +103,7 @@ public class DigestUtil {
/**
* 计算32位MD5摘要值并转为16进制字符串
*
*
* @param data 被摘要数据
* @return MD5摘要的16进制表示
*/
@@ -113,7 +113,7 @@ public class DigestUtil {
/**
* 计算32位MD5摘要值并转为16进制字符串
*
*
* @param data 被摘要数据
* @return MD5摘要的16进制表示
*/
@@ -123,18 +123,19 @@ public class DigestUtil {
/**
* 计算32位MD5摘要值并转为16进制字符串
*
*
* @param file 被摘要文件
* @return MD5摘要的16进制表示
*/
public static String md5Hex(File file) {
return new MD5().digestHex(file);
}
// ------------------------------------------------------------------------------------------- MD5 16
/**
* 计算16位MD5摘要值并转为16进制字符串
*
*
* @param data 被摘要数据
* @return MD5摘要的16进制表示
* @since 4.6.0
@@ -145,8 +146,8 @@ public class DigestUtil {
/**
* 计算16位MD5摘要值并转为16进制字符串
*
* @param data 被摘要数据
*
* @param data 被摘要数据
* @param charset 编码
* @return MD5摘要的16进制表示
* @since 4.6.0
@@ -157,7 +158,7 @@ public class DigestUtil {
/**
* 计算16位MD5摘要值并转为16进制字符串
*
*
* @param data 被摘要数据
* @return MD5摘要的16进制表示
* @since 4.6.0
@@ -168,7 +169,7 @@ public class DigestUtil {
/**
* 计算16位MD5摘要值并转为16进制字符串
*
*
* @param data 被摘要数据
* @return MD5摘要的16进制表示
* @since 4.6.0
@@ -179,7 +180,7 @@ public class DigestUtil {
/**
* 计算16位MD5摘要值并转为16进制字符串
*
*
* @param file 被摘要文件
* @return MD5摘要的16进制表示
* @since 4.6.0
@@ -190,7 +191,7 @@ public class DigestUtil {
/**
* 32位MD5转16位MD5
*
*
* @param md5Hex 32位MD5
* @return 16位MD5
* @since 4.4.1
@@ -200,9 +201,10 @@ public class DigestUtil {
}
// ------------------------------------------------------------------------------------------- SHA-1
/**
* 计算SHA-1摘要值
*
*
* @param data 被摘要数据
* @return SHA-1摘要
*/
@@ -212,8 +214,8 @@ public class DigestUtil {
/**
* 计算SHA-1摘要值
*
* @param data 被摘要数据
*
* @param data 被摘要数据
* @param charset 编码
* @return SHA-1摘要
*/
@@ -223,7 +225,7 @@ public class DigestUtil {
/**
* 计算sha1摘要值使用UTF-8编码
*
*
* @param data 被摘要数据
* @return MD5摘要
*/
@@ -233,7 +235,7 @@ public class DigestUtil {
/**
* 计算SHA-1摘要值
*
*
* @param data 被摘要数据
* @return SHA-1摘要
*/
@@ -243,7 +245,7 @@ public class DigestUtil {
/**
* 计算SHA-1摘要值
*
*
* @param file 被摘要文件
* @return SHA-1摘要
*/
@@ -253,7 +255,7 @@ public class DigestUtil {
/**
* 计算SHA-1摘要值并转为16进制字符串
*
*
* @param data 被摘要数据
* @return SHA-1摘要的16进制表示
*/
@@ -263,8 +265,8 @@ public class DigestUtil {
/**
* 计算SHA-1摘要值并转为16进制字符串
*
* @param data 被摘要数据
*
* @param data 被摘要数据
* @param charset 编码
* @return SHA-1摘要的16进制表示
*/
@@ -274,7 +276,7 @@ public class DigestUtil {
/**
* 计算SHA-1摘要值并转为16进制字符串
*
*
* @param data 被摘要数据
* @return SHA-1摘要的16进制表示
*/
@@ -284,7 +286,7 @@ public class DigestUtil {
/**
* 计算SHA-1摘要值并转为16进制字符串
*
*
* @param data 被摘要数据
* @return SHA-1摘要的16进制表示
*/
@@ -294,7 +296,7 @@ public class DigestUtil {
/**
* 计算SHA-1摘要值并转为16进制字符串
*
*
* @param file 被摘要文件
* @return SHA-1摘要的16进制表示
*/
@@ -303,9 +305,10 @@ public class DigestUtil {
}
// ------------------------------------------------------------------------------------------- SHA-256
/**
* 计算SHA-256摘要值
*
*
* @param data 被摘要数据
* @return SHA-256摘要
* @since 3.0.8
@@ -316,8 +319,8 @@ public class DigestUtil {
/**
* 计算SHA-256摘要值
*
* @param data 被摘要数据
*
* @param data 被摘要数据
* @param charset 编码
* @return SHA-256摘要
* @since 3.0.8
@@ -328,7 +331,7 @@ public class DigestUtil {
/**
* 计算sha256摘要值使用UTF-8编码
*
*
* @param data 被摘要数据
* @return MD5摘要
* @since 3.0.8
@@ -339,7 +342,7 @@ public class DigestUtil {
/**
* 计算SHA-256摘要值
*
*
* @param data 被摘要数据
* @return SHA-256摘要
* @since 3.0.8
@@ -350,7 +353,7 @@ public class DigestUtil {
/**
* 计算SHA-256摘要值
*
*
* @param file 被摘要文件
* @return SHA-256摘要
* @since 3.0.8
@@ -361,7 +364,7 @@ public class DigestUtil {
/**
* 计算SHA-1摘要值并转为16进制字符串
*
*
* @param data 被摘要数据
* @return SHA-256摘要的16进制表示
* @since 3.0.8
@@ -372,8 +375,8 @@ public class DigestUtil {
/**
* 计算SHA-256摘要值并转为16进制字符串
*
* @param data 被摘要数据
*
* @param data 被摘要数据
* @param charset 编码
* @return SHA-256摘要的16进制表示
* @since 3.0.8
@@ -384,7 +387,7 @@ public class DigestUtil {
/**
* 计算SHA-256摘要值并转为16进制字符串
*
*
* @param data 被摘要数据
* @return SHA-256摘要的16进制表示
* @since 3.0.8
@@ -395,7 +398,7 @@ public class DigestUtil {
/**
* 计算SHA-256摘要值并转为16进制字符串
*
*
* @param data 被摘要数据
* @return SHA-256摘要的16进制表示
* @since 3.0.8
@@ -406,7 +409,7 @@ public class DigestUtil {
/**
* 计算SHA-256摘要值并转为16进制字符串
*
*
* @param file 被摘要文件
* @return SHA-256摘要的16进制表示
* @since 3.0.8
@@ -416,11 +419,12 @@ public class DigestUtil {
}
// ------------------------------------------------------------------------------------------- Hmac
/**
* 创建HMac对象调用digest方法可获得hmac值
*
*
* @param algorithm {@link HmacAlgorithm}
* @param key 密钥,如果为<code>null</code>生成随机密钥
* @param key 密钥,如果为<code>null</code>生成随机密钥
* @return {@link HMac}
* @since 3.0.3
*/
@@ -430,9 +434,9 @@ public class DigestUtil {
/**
* 创建HMac对象调用digest方法可获得hmac值
*
*
* @param algorithm {@link HmacAlgorithm}
* @param key 密钥{@link SecretKey},如果为<code>null</code>生成随机密钥
* @param key 密钥{@link SecretKey},如果为<code>null</code>生成随机密钥
* @return {@link HMac}
* @since 3.0.3
*/
@@ -442,7 +446,7 @@ public class DigestUtil {
/**
* 新建摘要器
*
*
* @param algorithm 签名算法
* @return Digester
* @since 4.0.1
@@ -453,7 +457,7 @@ public class DigestUtil {
/**
* 新建摘要器
*
*
* @param algorithm 签名算法
* @return Digester
* @since 4.2.1
@@ -464,7 +468,7 @@ public class DigestUtil {
/**
* 生成Bcrypt加密后的密文
*
*
* @param password 明文密码
* @return 加密后的密文
* @since 4.1.1
@@ -475,8 +479,9 @@ public class DigestUtil {
/**
* 验证密码是否与Bcrypt加密后的密文匹配
*
*
* @param password 明文密码
* @param hashed hash值加密后的值
* @return 是否匹配
* @since 4.1.1
*/