新增 SHA-256 工具,使用 ShaUtils 替代 Sha1Utils

This commit is contained in:
thinkgem
2025-07-07 08:56:11 +08:00
parent 94d8dcff3f
commit 055d3036fb
6 changed files with 173 additions and 102 deletions

View File

@@ -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";

View File

@@ -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 {
}

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -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;