diff --git a/CHANGELOG.md b/CHANGELOG.md index ceb863ea8..7ebb247df 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ * 【http 】 修复HtmlUtil.removeHtmlAttr处理空格问题(issue#I8YV0K@Gitee) * 【core 】 修复CollUtil.containsAll在coll2长度大于coll1时逻辑歧义问题(issue#I8Z2Q4@Gitee) * 【poi 】 修复当sheetName 不存在时,ExcelUtil.getReader方法不会释放文件问题(issue#I8ZIQC@Gitee) +* 【crypto】 通过添加系统属性hutool.crypto.decodeHex强制关闭hex识别以解决hex和Base64歧义问题(issue#I90M9D@Gitee) ------------------------------------------------------------------------------------------------------------- # 5.8.25(2024-01-11) diff --git a/hutool-crypto/src/main/java/cn/hutool/crypto/SecureUtil.java b/hutool-crypto/src/main/java/cn/hutool/crypto/SecureUtil.java index b27280777..bb901d683 100755 --- a/hutool-crypto/src/main/java/cn/hutool/crypto/SecureUtil.java +++ b/hutool-crypto/src/main/java/cn/hutool/crypto/SecureUtil.java @@ -3,10 +3,7 @@ package cn.hutool.crypto; import cn.hutool.core.codec.Base64; import cn.hutool.core.io.FileUtil; import cn.hutool.core.lang.Validator; -import cn.hutool.core.util.ArrayUtil; -import cn.hutool.core.util.HexUtil; -import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; +import cn.hutool.core.util.*; import cn.hutool.crypto.asymmetric.AsymmetricAlgorithm; import cn.hutool.crypto.asymmetric.RSA; import cn.hutool.crypto.asymmetric.Sign; @@ -56,6 +53,9 @@ import java.util.Map; */ public class SecureUtil { + /** Hutool自定义系统属性:是否解码Hex字符 issue#I90M9D */ + public static String HUTOOL_CRYPTO_DECODE_HEX = "hutool.crypto.decodeHex"; + /** * 默认密钥字节数 * @@ -1014,7 +1014,10 @@ public class SecureUtil { * @since 4.3.3 */ public static byte[] decode(String key) { - return Validator.isHex(key) ? HexUtil.decodeHex(key) : Base64.decode(key); + // issue#I90M9D + // 某些特殊字符串会无法区分Hex还是Base64,此处使用系统属性强制关闭Hex解析 + final boolean decodeHex = SystemPropsUtil.getBoolean(HUTOOL_CRYPTO_DECODE_HEX, true); + return (decodeHex && Validator.isHex(key)) ? HexUtil.decodeHex(key) : Base64.decode(key); } /**