新增 encrypt.smAlgorithm 参数,是否使用国密 SM 算法(一键替换 SHA-1 替换为 SM3、AES 替换为 SM4 算法)

This commit is contained in:
thinkgem
2024-07-23 19:42:29 +08:00
parent 739f2d58b7
commit bd5d543bf5
2 changed files with 22 additions and 15 deletions

View File

@@ -5,7 +5,9 @@
package com.jeesite.common.shiro.realm; package com.jeesite.common.shiro.realm;
import com.jeesite.common.codec.EncodeUtils; import com.jeesite.common.codec.EncodeUtils;
import com.jeesite.common.codec.SM3Utils;
import com.jeesite.common.codec.Sha1Utils; import com.jeesite.common.codec.Sha1Utils;
import com.jeesite.common.config.Global;
import com.jeesite.common.shiro.authc.FormToken; import com.jeesite.common.shiro.authc.FormToken;
import com.jeesite.common.utils.SpringUtils; import com.jeesite.common.utils.SpringUtils;
import com.jeesite.modules.sys.entity.Log; import com.jeesite.modules.sys.entity.Log;
@@ -30,17 +32,13 @@ import javax.servlet.http.HttpServletRequest;
public class AuthorizingRealm extends BaseAuthorizingRealm { public class AuthorizingRealm extends BaseAuthorizingRealm {
public static final String HASH_ALGORITHM = "SHA-1"; public static final String HASH_ALGORITHM = "SHA-1";
public static final int HASH_INTERATIONS = 1024; public static final int HASH_ITERATIONS = 1024;
public static final int SALT_SIZE = 8; public static final int SALT_SIZE = 8;
private UserService userService; private UserService userService;
public AuthorizingRealm() { public AuthorizingRealm() {
super(); super();
// // 设定密码校验的Hash算法与迭代次数V4.1.4及以上版本不需要了统一使用validatePassword验证密码
// HashedCredentialsMatcher matcher = new HashedCredentialsMatcher(HASH_ALGORITHM);
// matcher.setHashIterations(HASH_INTERATIONS);
// this.setCredentialsMatcher(matcher);
} }
/** /**
@@ -86,9 +84,13 @@ public class AuthorizingRealm extends BaseAuthorizingRealm {
@Override @Override
public String encryptPassword(String plainPassword) { public String encryptPassword(String plainPassword) {
String plain = EncodeUtils.decodeHtml(plainPassword); String plain = EncodeUtils.decodeHtml(plainPassword);
byte[] salt = Sha1Utils.genSalt(SALT_SIZE); String salt = SM3Utils.genSaltString(SALT_SIZE);
byte[] hashPassword = Sha1Utils.sha1(plain.getBytes(), salt, HASH_INTERATIONS); if (Global.isSmAlgorithm()) {
return EncodeUtils.encodeHex(salt) + EncodeUtils.encodeHex(hashPassword); String data = SM3Utils.sm3(plain, salt, HASH_ITERATIONS);
return salt + data;
}
String data = Sha1Utils.sha1(plain, salt, HASH_ITERATIONS);
return salt + data;
} }
/** /**
@@ -101,9 +103,13 @@ public class AuthorizingRealm extends BaseAuthorizingRealm {
public boolean validatePassword(String plainPassword, String password) { public boolean validatePassword(String plainPassword, String password) {
try{ try{
String plain = EncodeUtils.decodeHtml(plainPassword); String plain = EncodeUtils.decodeHtml(plainPassword);
byte[] salt = EncodeUtils.decodeHex(password.substring(0, 16)); String salt = password.substring(0, SALT_SIZE * 2);
byte[] hashPassword = Sha1Utils.sha1(plain.getBytes(), salt, HASH_INTERATIONS); if (Global.isSmAlgorithm()) {
return password.equals(EncodeUtils.encodeHex(salt) + EncodeUtils.encodeHex(hashPassword)); String data = SM3Utils.sm3(plain, salt, HASH_ITERATIONS);
return password.equals(salt + data);
}
String data = Sha1Utils.sha1(plain, salt, HASH_ITERATIONS);
return password.equals(salt + data);
}catch(Exception e){ }catch(Exception e){
return false; return false;
} }

View File

@@ -41,6 +41,7 @@
<logger name="com.jeesite.common.j2cache" level="INFO" /> <logger name="com.jeesite.common.j2cache" level="INFO" />
<logger name="com.jeesite.common.j2cache.cache.support.caffeine" level="ERROR" /> <logger name="com.jeesite.common.j2cache.cache.support.caffeine" level="ERROR" />
<logger name="com.jeesite.common.mybatis" level="INFO" /> <logger name="com.jeesite.common.mybatis" level="INFO" />
<logger name="com.jeesite.common.mybatis.type" level="DEBUG" />
<logger name="com.jeesite.common.mybatis.mapper" level="DEBUG" /> <logger name="com.jeesite.common.mybatis.mapper" level="DEBUG" />
<logger name="com.jeesite.common.reflect.ReflectUtils" level="INFO" /> <logger name="com.jeesite.common.reflect.ReflectUtils" level="INFO" />
<logger name="com.jeesite.common.io.FileUtils" level="INFO" /> <logger name="com.jeesite.common.io.FileUtils" level="INFO" />