diff --git a/common/src/main/java/com/jeesite/common/codec/DigestUtils.java b/common/src/main/java/com/jeesite/common/codec/DigestUtils.java index 56c1b806..a73a12a2 100644 --- a/common/src/main/java/com/jeesite/common/codec/DigestUtils.java +++ b/common/src/main/java/com/jeesite/common/codec/DigestUtils.java @@ -19,6 +19,7 @@ import java.security.*; public class DigestUtils { public static final String SHA1 = "SHA-1"; + public static final String SHA256 = "SHA-256"; public static final String MD5 = "MD5"; public static final String SM3 = "SM3"; diff --git a/common/src/main/java/com/jeesite/common/codec/Sha1Utils.java b/common/src/main/java/com/jeesite/common/codec/Sha1Utils.java index dd7718df..323c48c2 100644 --- a/common/src/main/java/com/jeesite/common/codec/Sha1Utils.java +++ b/common/src/main/java/com/jeesite/common/codec/Sha1Utils.java @@ -4,79 +4,11 @@ */ package com.jeesite.common.codec; -import java.io.IOException; -import java.io.InputStream; -import java.nio.charset.StandardCharsets; - /** * SHA-1 加密工具类,散列加密,不可逆加密 * @author ThinkGem */ -public class Sha1Utils { - - /** - * 生成随机的 Byte[] 作为 salt 密钥. - * @param numBytes byte数组的大小 - */ - public static byte[] genSalt(int numBytes) { - return DigestUtils.genSalt(numBytes); - } - - /** - * 生成随机的 Byte[] 作为 salt 密钥,返回 HEX 值 - * @param numBytes byte 数组的大小 - */ - public static String genSaltString(int numBytes) { - return DigestUtils.genSaltString(numBytes); - } - - /** - * 对输入字符串进行 SHA-1 散列. - */ - public static byte[] sha1(byte[] input) { - return DigestUtils.digest(input, DigestUtils.SHA1, null, 1); - } - - /** - * 对输入字符串进行 SHA-1 散列. - */ - public static String sha1(String input) { - return EncodeUtils.encodeHex(sha1(input.getBytes(StandardCharsets.UTF_8))); - } - - /** - * 对输入字符串进行 SHA-1 散列. - */ - public static byte[] sha1(byte[] input, byte[] salt) { - return DigestUtils.digest(input, DigestUtils.SHA1, salt, 1); - } - - /** - * 对输入字符串进行 SHA-1 散列. - */ - public static String sha1(String data, String salt) { - return EncodeUtils.encodeHex(sha1(data.getBytes(StandardCharsets.UTF_8), EncodeUtils.decodeHex(salt))); - } - - /** - * 对输入字符串进行 SHA-1 散列. - */ - public static byte[] sha1(byte[] input, byte[] salt, int iterations) { - return DigestUtils.digest(input, DigestUtils.SHA1, salt, iterations); - } - - /** - * 对输入字符串进行 SHA-1 散列. - */ - public static String sha1(String input, String salt, int iterations) { - return EncodeUtils.encodeHex(sha1(input.getBytes(StandardCharsets.UTF_8), EncodeUtils.decodeHex(salt), iterations)); - } - - /** - * 对文件进行 SHA-1 散列. - */ - public static byte[] sha1(InputStream input) throws IOException { - return DigestUtils.digest(input, DigestUtils.SHA1); - } +@Deprecated +public class Sha1Utils extends ShaUtils { } diff --git a/common/src/main/java/com/jeesite/common/codec/ShaUtils.java b/common/src/main/java/com/jeesite/common/codec/ShaUtils.java new file mode 100644 index 00000000..b93c8a49 --- /dev/null +++ b/common/src/main/java/com/jeesite/common/codec/ShaUtils.java @@ -0,0 +1,131 @@ +/** + * Copyright (c) 2013-Now http://jeesite.com All rights reserved. + * No deletion without permission, or be held responsible to law. + */ +package com.jeesite.common.codec; + +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; + +/** + * SHA-1 和 SHA-256 加密工具类,散列加密,不可逆加密 + * @author ThinkGem + */ +public class ShaUtils { + + /** + * 生成随机的 Byte[] 作为 salt 密钥. + * @param numBytes byte数组的大小 + */ + public static byte[] genSalt(int numBytes) { + return DigestUtils.genSalt(numBytes); + } + + /** + * 生成随机的 Byte[] 作为 salt 密钥,返回 HEX 值 + * @param numBytes byte 数组的大小 + */ + public static String genSaltString(int numBytes) { + return DigestUtils.genSaltString(numBytes); + } + + /** + * 对输入字符串进行 SHA-1 散列. + */ + public static byte[] sha1(byte[] input) { + return DigestUtils.digest(input, DigestUtils.SHA1, null, 1); + } + + /** + * 对输入字符串进行 SHA-1 散列. + */ + public static String sha1(String input) { + return EncodeUtils.encodeHex(sha1(input.getBytes(StandardCharsets.UTF_8))); + } + + /** + * 对输入字符串进行 SHA-1 散列. + */ + public static byte[] sha1(byte[] input, byte[] salt) { + return DigestUtils.digest(input, DigestUtils.SHA1, salt, 1); + } + + /** + * 对输入字符串进行 SHA-1 散列. + */ + public static String sha1(String data, String salt) { + return EncodeUtils.encodeHex(sha1(data.getBytes(StandardCharsets.UTF_8), EncodeUtils.decodeHex(salt))); + } + + /** + * 对输入字符串进行 SHA-1 散列. + */ + public static byte[] sha1(byte[] input, byte[] salt, int iterations) { + return DigestUtils.digest(input, DigestUtils.SHA1, salt, iterations); + } + + /** + * 对输入字符串进行 SHA-1 散列. + */ + public static String sha1(String input, String salt, int iterations) { + return EncodeUtils.encodeHex(sha1(input.getBytes(StandardCharsets.UTF_8), EncodeUtils.decodeHex(salt), iterations)); + } + + /** + * 对文件进行 SHA-1 散列. + */ + public static byte[] sha1(InputStream input) throws IOException { + return DigestUtils.digest(input, DigestUtils.SHA1); + } + + /** + * 对输入字符串进行 SHA-256 散列. + */ + public static byte[] sha256(byte[] input) { + return DigestUtils.digest(input, DigestUtils.SHA256, null, 1); + } + + /** + * 对输入字符串进行 SHA-256 散列. + */ + public static String sha256(String input) { + return EncodeUtils.encodeHex(sha256(input.getBytes(StandardCharsets.UTF_8))); + } + + /** + * 对输入字符串进行 SHA-256 散列. + */ + public static byte[] sha256(byte[] input, byte[] salt) { + return DigestUtils.digest(input, DigestUtils.SHA256, salt, 1); + } + + /** + * 对输入字符串进行 SHA-256 散列. + */ + public static String sha256(String data, String salt) { + return EncodeUtils.encodeHex(sha256(data.getBytes(StandardCharsets.UTF_8), EncodeUtils.decodeHex(salt))); + } + + /** + * 对输入字符串进行 SHA-256 散列. + */ + public static byte[] sha256(byte[] input, byte[] salt, int iterations) { + return DigestUtils.digest(input, DigestUtils.SHA256, salt, iterations); + } + + /** + * 对输入字符串进行 SHA-256 散列. + */ + public static String sha256(String input, String salt, int iterations) { + return EncodeUtils.encodeHex(sha256(input.getBytes(StandardCharsets.UTF_8), EncodeUtils.decodeHex(salt), iterations)); + } + + /** + * 对文件进行 SHA-256 散列. + */ + public static byte[] sha256(InputStream input) throws IOException { + return DigestUtils.digest(input, DigestUtils.SHA256); + } + +} diff --git a/common/src/test/java/com/jeesite/test/codec/Sha1UtilsTest.java b/common/src/test/java/com/jeesite/test/codec/Sha1UtilsTest.java deleted file mode 100644 index 02656dc0..00000000 --- a/common/src/test/java/com/jeesite/test/codec/Sha1UtilsTest.java +++ /dev/null @@ -1,28 +0,0 @@ -/** - * Copyright (c) 2013-Now http://jeesite.com All rights reserved. - * No deletion without permission, or be held responsible to law. - */ -package com.jeesite.test.codec; - -import com.jeesite.common.codec.Sha1Utils; - -/** - * SHA-1 加密工具类,散列加密,不可逆加密 - * @author ThinkGem - * @version 2024-07-22 - */ -public class Sha1UtilsTest { - - public static void main(String[] args) { - - String s = "Hello word! 你好,中文!"; - System.out.println(s); - - String salt = Sha1Utils.genSaltString(8); - System.out.println(salt); - String data = Sha1Utils.sha1(s, salt); - System.out.println(data); - - } - -} \ No newline at end of file diff --git a/common/src/test/java/com/jeesite/test/codec/ShaUtilsTest.java b/common/src/test/java/com/jeesite/test/codec/ShaUtilsTest.java new file mode 100644 index 00000000..6e5cbb99 --- /dev/null +++ b/common/src/test/java/com/jeesite/test/codec/ShaUtilsTest.java @@ -0,0 +1,36 @@ +/** + * Copyright (c) 2013-Now http://jeesite.com All rights reserved. + * No deletion without permission, or be held responsible to law. + */ +package com.jeesite.test.codec; + +import com.jeesite.common.codec.ShaUtils; + +/** + * SHA-1 加密工具类,散列加密,不可逆加密 + * @author ThinkGem + * @version 2024-07-22 + */ +public class ShaUtilsTest { + + public static final int HASH_ITERATIONS = 1024; + public static final int SALT_SIZE = 8; + + public static void main(String[] args) { + + String s = "Hello word! 你好,中文!"; + System.out.println(s); + + String salt = ShaUtils.genSaltString(SALT_SIZE); + System.out.println(salt); + String data = ShaUtils.sha1(s, salt, HASH_ITERATIONS); + System.out.println(data); + + String salt2 = ShaUtils.genSaltString(SALT_SIZE); + System.out.println(salt2); + String data2 = ShaUtils.sha256(s, salt2, HASH_ITERATIONS); + System.out.println(data2); + + } + +} \ No newline at end of file diff --git a/modules/core/src/main/java/com/jeesite/common/shiro/realm/AuthorizingRealm.java b/modules/core/src/main/java/com/jeesite/common/shiro/realm/AuthorizingRealm.java index 8db092af..85b0b8eb 100644 --- a/modules/core/src/main/java/com/jeesite/common/shiro/realm/AuthorizingRealm.java +++ b/modules/core/src/main/java/com/jeesite/common/shiro/realm/AuthorizingRealm.java @@ -6,7 +6,7 @@ package com.jeesite.common.shiro.realm; import com.jeesite.common.codec.EncodeUtils; import com.jeesite.common.codec.SM3Utils; -import com.jeesite.common.codec.Sha1Utils; +import com.jeesite.common.codec.ShaUtils; import com.jeesite.common.config.Global; import com.jeesite.common.shiro.authc.FormToken; import com.jeesite.common.utils.SpringUtils; @@ -31,7 +31,6 @@ import javax.servlet.http.HttpServletRequest; */ public class AuthorizingRealm extends BaseAuthorizingRealm { - public static final String HASH_ALGORITHM = "SHA-1"; public static final int HASH_ITERATIONS = 1024; public static final int SALT_SIZE = 8; @@ -89,7 +88,7 @@ public class AuthorizingRealm extends BaseAuthorizingRealm { String data = SM3Utils.sm3(plain, salt, HASH_ITERATIONS); return salt + data; } - String data = Sha1Utils.sha1(plain, salt, HASH_ITERATIONS); + String data = ShaUtils.sha1(plain, salt, HASH_ITERATIONS); return salt + data; } @@ -108,7 +107,7 @@ public class AuthorizingRealm extends BaseAuthorizingRealm { String data = SM3Utils.sm3(plain, salt, HASH_ITERATIONS); return password.equals(salt + data); } - String data = Sha1Utils.sha1(plain, salt, HASH_ITERATIONS); + String data = ShaUtils.sha1(plain, salt, HASH_ITERATIONS); return password.equals(salt + data); }catch(Exception e){ return false;