mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-05-09 23:51:34 +08:00
add SignUtil
This commit is contained in:
parent
c0da48e09b
commit
f054cef97b
@ -3,11 +3,12 @@
|
|||||||
|
|
||||||
-------------------------------------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
# 5.7.20 (2022-01-11)
|
# 5.7.20 (2022-01-12)
|
||||||
|
|
||||||
### 🐣新特性
|
### 🐣新特性
|
||||||
* 【core 】 增加对null值友好的groupingBy操作的Collector实现,可指定map类型(pr#498@Gitee)
|
* 【core 】 增加对null值友好的groupingBy操作的Collector实现,可指定map类型(pr#498@Gitee)
|
||||||
* 【core 】 增加KetamaHash(issue#2084@Github)
|
* 【core 】 增加KetamaHash(issue#2084@Github)
|
||||||
|
* 【crypto 】 增加SignUtil
|
||||||
*
|
*
|
||||||
### 🐞Bug修复
|
### 🐞Bug修复
|
||||||
* 【core 】 修复setter重载导致匹配错误(issue#2082@Github)
|
* 【core 】 修复setter重载导致匹配错误(issue#2082@Github)
|
||||||
|
@ -3,7 +3,6 @@ package cn.hutool.crypto;
|
|||||||
import cn.hutool.core.codec.Base64;
|
import cn.hutool.core.codec.Base64;
|
||||||
import cn.hutool.core.io.FileUtil;
|
import cn.hutool.core.io.FileUtil;
|
||||||
import cn.hutool.core.lang.Validator;
|
import cn.hutool.core.lang.Validator;
|
||||||
import cn.hutool.core.map.MapUtil;
|
|
||||||
import cn.hutool.core.util.HexUtil;
|
import cn.hutool.core.util.HexUtil;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import cn.hutool.crypto.asymmetric.AsymmetricAlgorithm;
|
import cn.hutool.crypto.asymmetric.AsymmetricAlgorithm;
|
||||||
@ -830,7 +829,7 @@ public class SecureUtil {
|
|||||||
* @since 3.3.0
|
* @since 3.3.0
|
||||||
*/
|
*/
|
||||||
public static Sign sign(SignAlgorithm algorithm) {
|
public static Sign sign(SignAlgorithm algorithm) {
|
||||||
return new Sign(algorithm);
|
return SignUtil.sign(algorithm);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -845,7 +844,7 @@ public class SecureUtil {
|
|||||||
* @since 3.3.0
|
* @since 3.3.0
|
||||||
*/
|
*/
|
||||||
public static Sign sign(SignAlgorithm algorithm, String privateKeyBase64, String publicKeyBase64) {
|
public static Sign sign(SignAlgorithm algorithm, String privateKeyBase64, String publicKeyBase64) {
|
||||||
return new Sign(algorithm, privateKeyBase64, publicKeyBase64);
|
return SignUtil.sign(algorithm, privateKeyBase64, publicKeyBase64);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -860,7 +859,7 @@ public class SecureUtil {
|
|||||||
* @since 3.3.0
|
* @since 3.3.0
|
||||||
*/
|
*/
|
||||||
public static Sign sign(SignAlgorithm algorithm, byte[] privateKey, byte[] publicKey) {
|
public static Sign sign(SignAlgorithm algorithm, byte[] privateKey, byte[] publicKey) {
|
||||||
return new Sign(algorithm, privateKey, publicKey);
|
return SignUtil.sign(algorithm, privateKey, publicKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -875,7 +874,7 @@ public class SecureUtil {
|
|||||||
* @since 4.0.1
|
* @since 4.0.1
|
||||||
*/
|
*/
|
||||||
public static String signParams(SymmetricCrypto crypto, Map<?, ?> params, String... otherParams) {
|
public static String signParams(SymmetricCrypto crypto, Map<?, ?> params, String... otherParams) {
|
||||||
return signParams(crypto, params, StrUtil.EMPTY, StrUtil.EMPTY, true, otherParams);
|
return SignUtil.signParams(crypto, params, otherParams);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -893,7 +892,7 @@ public class SecureUtil {
|
|||||||
*/
|
*/
|
||||||
public static String signParams(SymmetricCrypto crypto, Map<?, ?> params, String separator,
|
public static String signParams(SymmetricCrypto crypto, Map<?, ?> params, String separator,
|
||||||
String keyValueSeparator, boolean isIgnoreNull, String... otherParams) {
|
String keyValueSeparator, boolean isIgnoreNull, String... otherParams) {
|
||||||
return crypto.encryptHex(MapUtil.sortJoin(params, separator, keyValueSeparator, isIgnoreNull, otherParams));
|
return SignUtil.signParams(crypto, params, separator, keyValueSeparator, isIgnoreNull, otherParams);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -907,7 +906,7 @@ public class SecureUtil {
|
|||||||
* @since 4.0.1
|
* @since 4.0.1
|
||||||
*/
|
*/
|
||||||
public static String signParamsMd5(Map<?, ?> params, String... otherParams) {
|
public static String signParamsMd5(Map<?, ?> params, String... otherParams) {
|
||||||
return signParams(DigestAlgorithm.MD5, params, otherParams);
|
return SignUtil.signParamsMd5(params, otherParams);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -921,7 +920,7 @@ public class SecureUtil {
|
|||||||
* @since 4.0.8
|
* @since 4.0.8
|
||||||
*/
|
*/
|
||||||
public static String signParamsSha1(Map<?, ?> params, String... otherParams) {
|
public static String signParamsSha1(Map<?, ?> params, String... otherParams) {
|
||||||
return signParams(DigestAlgorithm.SHA1, params, otherParams);
|
return SignUtil.signParamsSha1(params, otherParams);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -935,7 +934,7 @@ public class SecureUtil {
|
|||||||
* @since 4.0.1
|
* @since 4.0.1
|
||||||
*/
|
*/
|
||||||
public static String signParamsSha256(Map<?, ?> params, String... otherParams) {
|
public static String signParamsSha256(Map<?, ?> params, String... otherParams) {
|
||||||
return signParams(DigestAlgorithm.SHA256, params, otherParams);
|
return SignUtil.signParamsSha256(params, otherParams);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -950,7 +949,7 @@ public class SecureUtil {
|
|||||||
* @since 4.0.1
|
* @since 4.0.1
|
||||||
*/
|
*/
|
||||||
public static String signParams(DigestAlgorithm digestAlgorithm, Map<?, ?> params, String... otherParams) {
|
public static String signParams(DigestAlgorithm digestAlgorithm, Map<?, ?> params, String... otherParams) {
|
||||||
return signParams(digestAlgorithm, params, StrUtil.EMPTY, StrUtil.EMPTY, true, otherParams);
|
return SignUtil.signParams(digestAlgorithm, params, otherParams);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -968,7 +967,7 @@ public class SecureUtil {
|
|||||||
*/
|
*/
|
||||||
public static String signParams(DigestAlgorithm digestAlgorithm, Map<?, ?> params, String separator,
|
public static String signParams(DigestAlgorithm digestAlgorithm, Map<?, ?> params, String separator,
|
||||||
String keyValueSeparator, boolean isIgnoreNull, String... otherParams) {
|
String keyValueSeparator, boolean isIgnoreNull, String... otherParams) {
|
||||||
return new Digester(digestAlgorithm).digestHex(MapUtil.sortJoin(params, separator, keyValueSeparator, isIgnoreNull, otherParams));
|
return SignUtil.signParams(digestAlgorithm, params, separator, keyValueSeparator, isIgnoreNull, otherParams);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
176
hutool-crypto/src/main/java/cn/hutool/crypto/SignUtil.java
Executable file
176
hutool-crypto/src/main/java/cn/hutool/crypto/SignUtil.java
Executable file
@ -0,0 +1,176 @@
|
|||||||
|
package cn.hutool.crypto;
|
||||||
|
|
||||||
|
import cn.hutool.core.map.MapUtil;
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
|
import cn.hutool.crypto.asymmetric.Sign;
|
||||||
|
import cn.hutool.crypto.asymmetric.SignAlgorithm;
|
||||||
|
import cn.hutool.crypto.digest.DigestAlgorithm;
|
||||||
|
import cn.hutool.crypto.digest.Digester;
|
||||||
|
import cn.hutool.crypto.symmetric.SymmetricCrypto;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 签名工具类<br>
|
||||||
|
* 封装包括:
|
||||||
|
* <ul>
|
||||||
|
* <li>非堆成签名,签名算法支持见{@link SignAlgorithm}</li>
|
||||||
|
* <li>对称签名,支持Map类型参数排序后签名</li>
|
||||||
|
* <li>摘要签名,支持Map类型参数排序后签名,签名方法见:{@link DigestAlgorithm}</li>
|
||||||
|
* </ul>
|
||||||
|
*
|
||||||
|
* @author looly
|
||||||
|
* @since 5.7.20
|
||||||
|
*/
|
||||||
|
public class SignUtil {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建签名算法对象<br>
|
||||||
|
* 生成新的私钥公钥对
|
||||||
|
*
|
||||||
|
* @param algorithm 签名算法
|
||||||
|
* @return {@link Sign}
|
||||||
|
* @since 3.3.0
|
||||||
|
*/
|
||||||
|
public static Sign sign(SignAlgorithm algorithm) {
|
||||||
|
return new Sign(algorithm);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建签名算法对象<br>
|
||||||
|
* 私钥和公钥同时为空时生成一对新的私钥和公钥<br>
|
||||||
|
* 私钥和公钥可以单独传入一个,如此则只能使用此钥匙来做签名或验证
|
||||||
|
*
|
||||||
|
* @param algorithm 签名算法
|
||||||
|
* @param privateKeyBase64 私钥Base64
|
||||||
|
* @param publicKeyBase64 公钥Base64
|
||||||
|
* @return {@link Sign}
|
||||||
|
* @since 3.3.0
|
||||||
|
*/
|
||||||
|
public static Sign sign(SignAlgorithm algorithm, String privateKeyBase64, String publicKeyBase64) {
|
||||||
|
return new Sign(algorithm, privateKeyBase64, publicKeyBase64);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建Sign算法对象<br>
|
||||||
|
* 私钥和公钥同时为空时生成一对新的私钥和公钥<br>
|
||||||
|
* 私钥和公钥可以单独传入一个,如此则只能使用此钥匙来做签名或验证
|
||||||
|
*
|
||||||
|
* @param algorithm 算法枚举
|
||||||
|
* @param privateKey 私钥
|
||||||
|
* @param publicKey 公钥
|
||||||
|
* @return {@link Sign}
|
||||||
|
* @since 3.3.0
|
||||||
|
*/
|
||||||
|
public static Sign sign(SignAlgorithm algorithm, byte[] privateKey, byte[] publicKey) {
|
||||||
|
return new Sign(algorithm, privateKey, publicKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 对参数做签名<br>
|
||||||
|
* 参数签名为对Map参数按照key的顺序排序后拼接为字符串,然后根据提供的签名算法生成签名字符串<br>
|
||||||
|
* 拼接后的字符串键值对之间无符号,键值对之间无符号,忽略null值
|
||||||
|
*
|
||||||
|
* @param crypto 对称加密算法
|
||||||
|
* @param params 参数
|
||||||
|
* @param otherParams 其它附加参数字符串(例如密钥)
|
||||||
|
* @return 签名
|
||||||
|
* @since 4.0.1
|
||||||
|
*/
|
||||||
|
public static String signParams(SymmetricCrypto crypto, Map<?, ?> params, String... otherParams) {
|
||||||
|
return signParams(crypto, params, StrUtil.EMPTY, StrUtil.EMPTY, true, otherParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 对参数做签名<br>
|
||||||
|
* 参数签名为对Map参数按照key的顺序排序后拼接为字符串,然后根据提供的签名算法生成签名字符串
|
||||||
|
*
|
||||||
|
* @param crypto 对称加密算法
|
||||||
|
* @param params 参数
|
||||||
|
* @param separator entry之间的连接符
|
||||||
|
* @param keyValueSeparator kv之间的连接符
|
||||||
|
* @param isIgnoreNull 是否忽略null的键和值
|
||||||
|
* @param otherParams 其它附加参数字符串(例如密钥)
|
||||||
|
* @return 签名
|
||||||
|
* @since 4.0.1
|
||||||
|
*/
|
||||||
|
public static String signParams(SymmetricCrypto crypto, Map<?, ?> params, String separator,
|
||||||
|
String keyValueSeparator, boolean isIgnoreNull, String... otherParams) {
|
||||||
|
return crypto.encryptHex(MapUtil.sortJoin(params, separator, keyValueSeparator, isIgnoreNull, otherParams));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 对参数做md5签名<br>
|
||||||
|
* 参数签名为对Map参数按照key的顺序排序后拼接为字符串,然后根据提供的签名算法生成签名字符串<br>
|
||||||
|
* 拼接后的字符串键值对之间无符号,键值对之间无符号,忽略null值
|
||||||
|
*
|
||||||
|
* @param params 参数
|
||||||
|
* @param otherParams 其它附加参数字符串(例如密钥)
|
||||||
|
* @return 签名
|
||||||
|
* @since 4.0.1
|
||||||
|
*/
|
||||||
|
public static String signParamsMd5(Map<?, ?> params, String... otherParams) {
|
||||||
|
return signParams(DigestAlgorithm.MD5, params, otherParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 对参数做Sha1签名<br>
|
||||||
|
* 参数签名为对Map参数按照key的顺序排序后拼接为字符串,然后根据提供的签名算法生成签名字符串<br>
|
||||||
|
* 拼接后的字符串键值对之间无符号,键值对之间无符号,忽略null值
|
||||||
|
*
|
||||||
|
* @param params 参数
|
||||||
|
* @param otherParams 其它附加参数字符串(例如密钥)
|
||||||
|
* @return 签名
|
||||||
|
* @since 4.0.8
|
||||||
|
*/
|
||||||
|
public static String signParamsSha1(Map<?, ?> params, String... otherParams) {
|
||||||
|
return signParams(DigestAlgorithm.SHA1, params, otherParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 对参数做Sha256签名<br>
|
||||||
|
* 参数签名为对Map参数按照key的顺序排序后拼接为字符串,然后根据提供的签名算法生成签名字符串<br>
|
||||||
|
* 拼接后的字符串键值对之间无符号,键值对之间无符号,忽略null值
|
||||||
|
*
|
||||||
|
* @param params 参数
|
||||||
|
* @param otherParams 其它附加参数字符串(例如密钥)
|
||||||
|
* @return 签名
|
||||||
|
* @since 4.0.1
|
||||||
|
*/
|
||||||
|
public static String signParamsSha256(Map<?, ?> params, String... otherParams) {
|
||||||
|
return signParams(DigestAlgorithm.SHA256, params, otherParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 对参数做签名<br>
|
||||||
|
* 参数签名为对Map参数按照key的顺序排序后拼接为字符串,然后根据提供的签名算法生成签名字符串<br>
|
||||||
|
* 拼接后的字符串键值对之间无符号,键值对之间无符号,忽略null值
|
||||||
|
*
|
||||||
|
* @param digestAlgorithm 摘要算法
|
||||||
|
* @param params 参数
|
||||||
|
* @param otherParams 其它附加参数字符串(例如密钥)
|
||||||
|
* @return 签名
|
||||||
|
* @since 4.0.1
|
||||||
|
*/
|
||||||
|
public static String signParams(DigestAlgorithm digestAlgorithm, Map<?, ?> params, String... otherParams) {
|
||||||
|
return signParams(digestAlgorithm, params, StrUtil.EMPTY, StrUtil.EMPTY, true, otherParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 对参数做签名<br>
|
||||||
|
* 参数签名为对Map参数按照key的顺序排序后拼接为字符串,然后根据提供的签名算法生成签名字符串
|
||||||
|
*
|
||||||
|
* @param digestAlgorithm 摘要算法
|
||||||
|
* @param params 参数
|
||||||
|
* @param separator entry之间的连接符
|
||||||
|
* @param keyValueSeparator kv之间的连接符
|
||||||
|
* @param isIgnoreNull 是否忽略null的键和值
|
||||||
|
* @param otherParams 其它附加参数字符串(例如密钥)
|
||||||
|
* @return 签名
|
||||||
|
* @since 4.0.1
|
||||||
|
*/
|
||||||
|
public static String signParams(DigestAlgorithm digestAlgorithm, Map<?, ?> params, String separator,
|
||||||
|
String keyValueSeparator, boolean isIgnoreNull, String... otherParams) {
|
||||||
|
return new Digester(digestAlgorithm).digestHex(MapUtil.sortJoin(params, separator, keyValueSeparator, isIgnoreNull, otherParams));
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user