Browse Source

优化了jasypt配置,与一期的配置保持一致

dev-V1.0.1
ganhao 6 months ago
parent
commit
bf1d110bc3
  1. 38
      zdxt-common/zdxt-common-encrypt/src/main/java/org/dromara/common/encrypt/config/CustomEncryptorConfig.java
  2. 24
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/common/config/RuoYiConfig.java
  3. 75
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/common/config/SiqConfig.java
  4. 5
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/common/util/IdCardCryptoUtil.java
  5. 58
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/common/util/jasypt/JasyptUtils.java
  6. 28
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EnterpriseUserServiceImpl.java
  7. 6
      zdxt-web-server/zdxt-admin-web-server/src/main/resources/application-dev.yml
  8. 2
      zdxt-web-server/zdxt-admin-web-server/src/main/resources/application.yml

38
zdxt-common/zdxt-common-encrypt/src/main/java/org/dromara/common/encrypt/config/CustomEncryptorConfig.java

@ -21,24 +21,24 @@ public class CustomEncryptorConfig {
@Bean("jasyptStringEncryptor")
public StringEncryptor jasyptStringEncryptor() {
return createEncryptor();
}
/**
* 创建加密器实例(Bean 注册和 main 方法共用)
*/
private static PooledPBEStringEncryptor createEncryptor() {
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
config.setPassword(CRACK);
config.setAlgorithm("PBEWithMD5AndDES");
config.setKeyObtentionIterations("1000");
config.setPoolSize("1");
config.setProviderName("SunJCE");
config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");
config.setStringOutputType("base64");
encryptor.setConfig(config);
return encryptor;
return new org.dromara.common.encrypt.config.jasypt.CustomEncryptorConfig();
}
//
// /**
// * 创建加密器实例(Bean 注册和 main 方法共用)
// */
// private static PooledPBEStringEncryptor createEncryptor() {
// PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
// SimpleStringPBEConfig config = new SimpleStringPBEConfig();
// config.setPassword(CRACK);
// config.setAlgorithm("PBEWithMD5AndDES");
// config.setKeyObtentionIterations("1000");
// config.setPoolSize("1");
// config.setProviderName("SunJCE");
// config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
// config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");
// config.setStringOutputType("base64");
// encryptor.setConfig(config);
// return encryptor;
// }
}

24
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/common/config/RuoYiConfig.java

@ -19,6 +19,13 @@ public class RuoYiConfig
/** 实例演示开关 */
private boolean demoEnabled;
/** RSA公钥 */
private String publicKey;
/** RSA私钥 */
private String privateKey;
/**
* 文件配置内部类
*/
@ -78,6 +85,23 @@ public class RuoYiConfig
this.file = file;
}
public String getPublicKey() {
return publicKey;
}
public void setPublicKey(String publicKey) {
this.publicKey = publicKey;
}
public String getPrivateKey() {
return privateKey;
}
public void setPrivateKey(String privateKey) {
this.privateKey = privateKey;
}
/**
* 获取上传路径(兼容旧代码)
*/

75
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/common/config/SiqConfig.java

@ -0,0 +1,75 @@
package com.zdxt.enforcementcode.common.config;
import org.dromara.common.core.utils.SpringUtils;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* 深i企相关配置
*
* @author ruoyi
*/
@Component
@ConfigurationProperties(prefix = "siq")
public class SiqConfig
{
/** 深i企对接URL */
private String siqUrl;
/** 深i企对接code */
private String code;
/** 深i企对接密钥 */
private String secretKey;
/** 模拟数据开关 */
private MockConfig mock = new MockConfig();
/**
* 模拟配置内部类
*/
public static class MockConfig {
/** 是否启用模拟数据 */
private boolean enabled;
public boolean isEnabled() {
return enabled;
}
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
}
public String getSiqUrl() {
return siqUrl;
}
public void setSiqUrl(String siqUrl) {
this.siqUrl = siqUrl;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getSecretKey() {
return secretKey;
}
public void setSecretKey(String secretKey) {
this.secretKey = secretKey;
}
public MockConfig getMock() {
return mock;
}
public void setMock(MockConfig mock) {
this.mock = mock;
}
}

5
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/common/util/IdCardCryptoUtil.java

@ -20,10 +20,15 @@ public class IdCardCryptoUtil {
/**
* 以下字符串为密钥,可以通过配置来传递
* @deprecated 请使用 SiqConfig 配置类获取密钥
*/
@Deprecated
public static final String OUTER_AES_KEY = "u3BPiZWALItH27e34oO6bw==";
@Deprecated
public static final String INNER_AES_KEY = "ol1hV81iCruo+thxtZGnCg==";
@Deprecated
public static final String PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDADIVdRXNyT5pmGxSUfwEup2Y1YCz7VfibMyyQhkpVP3ByKsoFDjZ30yW5gv70sQbqn/MCthTFqwh3/I/YLfthM3vU7TdlmNfnlKcQ6prxYofLkX8akrhgQVFerb/4DhcbAk5xvx12Dkeh/nzDf5Qw2K3CymRPnr4zN6ZjAL79HwIDAQAB";
@Deprecated
public static final String PRIVATE_KEY = "MIICdAIBADANBgkqhkiG9w0BAQEFAASCAl4wggJaAgEAAoGBAMAMhV1Fc3JPmmYbFJR/AS6nZjVgLPtV+JszLJCGSlU/cHIqygUONnfTJbmC/vSxBuqf8wK2FMWrCHf8j9gt+2Eze9TtN2WY1+eUpxDqmvFih8uRfxqSuGBBUV6tv/gOFxsCTnG/HXYOR6H+fMN/lDDYrcLKZE+evjM3pmMAvv0fAgMBAAECf2rTWPVVrHuC/ywzFz+CmSXAxLNSZbMCH0doYvs0hIrmvtjCjgN1F6P1z2yUpHBEbsetZEwdyQnEf74+WCuBaFIYjmQm/05grIxam/QrGibnV5qNiA0VeCkj6bUy+z5mt3/ithgzjmOiYIgMenjf6ut6RmgRDodgJiFbvSvfskECQQDoqGMNaUV+Y/O9h+l9eOCkSUOjOsL9WDRL34ei/jf7VFFYBZLs2GMzLunDkDz1dHvufDiMPeHUTTN8zIEEpNMVAkEA01Ehf9Np2zUqFQp3SW/fHVsaGM97JsbsTQrsDdUWwZLJTSQ7Yf+yg21GkNa8Mmlsp1OLyS607HV7lPlKO0LsYwJBAN1LTOv0taUCbVRZcj1mPEYHac5Ylh9jRlrkwp7GL3lfOf//TUD6kWCdvrvE9jaCFV9ByIecVLEavV53JkDEhgECQHgR40z0XXOWs8Cc38a0cDwH5b4vNjSEVwQ3roT1jSaUNxlD+xHl7hLLZosp2Gl0ia5RxF2d0mOBJaUyOMGPdy0CQCLBU3995JMoUyLgt2+Riw0PFbdxFEnKGyshAt5Q957/hC6L/V5tQNnh/AM9q23DIUQGb1whhxdIzV12qFSSS34=";
public static void main(String[] args) {

58
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/common/util/jasypt/JasyptUtils.java

@ -0,0 +1,58 @@
package com.zdxt.enforcementcode.common.util.jasypt;
import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.EnvironmentStringPBEConfig;
/**
* alibaba druid加解密规则:
* 明文密码+私钥(privateKey)加密=加密密码
* 加密密码+公钥(publicKey)解密=明文密码
*/
public final class JasyptUtils {
/**
* 加密算法
*/
private static final String PBEWITHMD5ANDDES = "PBEWithMD5AndDES";
/**
* @param text 待加密原文
* @param crack 盐值(密钥)
* @return 加密后的字符串
* @Description: Jasypt加密(PBEWithMD5AndDES)
*/
public static String encryptWithMD5(String text, String crack) {
//1.创建加解密工具实例
StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
//2.加解密配置
EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig();
config.setAlgorithm(PBEWITHMD5ANDDES);
config.setPassword(crack);
encryptor.setConfig(config);
//3.加密
return encryptor.encrypt(text);
}
/**
* @param text 待解密原文
* @param crack 盐值(密钥)
* @return 解密后的字符串
* @Description: Jasypt解密(PBEWithMD5AndDES)
*/
public static String decryptWithMD5(String text, String crack) {
StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig();
config.setAlgorithm(PBEWITHMD5ANDDES);
config.setPassword(crack);
encryptor.setConfig(config);
return encryptor.decrypt(text);
}
public static void main(String[] args) {
//加密
String s = encryptWithMD5("szsf@zfjd", "ATPfOhpnAVp6yBas7RU");
System.out.println(s);
String channelcs1 = decryptWithMD5("zTr/tj2VgFxQyunI4eIL7NyRWDPSMPSB0VlwTYeHTdsEWyu1H96xWw==", "ATPfOhpnAVp6yBas7RU");
System.out.println(channelcs1);
}
}

28
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EnterpriseUserServiceImpl.java

@ -1,5 +1,8 @@
package com.zdxt.enforcementcode.service.impl;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.zdxt.enforcementcode.common.config.RuoYiConfig;
import com.zdxt.enforcementcode.common.config.SiqConfig;
import com.zdxt.enforcementcode.common.util.IdCardCryptoUtil;
import com.zdxt.enforcementcode.domain.EnterpriseUser;
import com.zdxt.enforcementcode.domain.bo.EnterpriseUserBo;
import com.zdxt.enforcementcode.domain.vo.EnterpriseUserRefVo;
@ -37,10 +40,10 @@ public class EnterpriseUserServiceImpl implements IEnterpriseUserService {
private final EnterpriseUserRefMapper enterpriseUserRefMapper;
private final SiqConfig siqConfig;
/**
* 查询企业用户信息
*
* 手机号码需要解密
* @param userId 主键
* @return 企业用户信息
*/
@ -53,6 +56,19 @@ public class EnterpriseUserServiceImpl implements IEnterpriseUserService {
enterpriseUserVo = baseMapper.selectVoById(userId);
enterpriseUserVo.setDeptName(enterpriseUserRefVo1.getEnterpriseName());
enterpriseUserVo.setDeptId(enterpriseUserRefVo1.getEnterpriseId());
String phoneNumber = enterpriseUserVo.getPhonenumber();
if(StringUtils.isNotBlank(phoneNumber)){
try {
// 解密手机号
phoneNumber = IdCardCryptoUtil.symmetricDecryptIdCard(
siqConfig.getSecretKey(),
phoneNumber);
}catch (Exception e){
log.error("手机号码解密失败:{}",phoneNumber, e);
}
enterpriseUserVo.setPhonenumber(phoneNumber);
}
}
return enterpriseUserVo;
}
@ -197,9 +213,13 @@ public class EnterpriseUserServiceImpl implements IEnterpriseUserService {
// }
//
try {
LambdaUpdateWrapper<EnterpriseUser> updateWrapper = new LambdaUpdateWrapper<>();
// 调试:打印密钥信息
String secretKey = siqConfig.getSecretKey();
// 加密手机号
String newPhoneNumber = IdCardCryptoUtil.symmetricEncryptIdCard(secretKey, phoneNumber);
LambdaUpdateWrapper<EnterpriseUser> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(EnterpriseUser::getUserId, userId)
.set(EnterpriseUser::getPhonenumber, phoneNumber);
.set(EnterpriseUser::getPhonenumber, newPhoneNumber);
int result = baseMapper.update(null, updateWrapper);
if (result > 0) {

6
zdxt-web-server/zdxt-admin-web-server/src/main/resources/application-dev.yml

@ -292,13 +292,11 @@ siq:
#正式
# siqUrl: http://10.76.108.3/siqApi
# code: zfjdm
# secretKey: SXRpWEhVN3RHM3ZFbzRQcQ==
# secretKey: SXRpWEhVN3RHM3ZFbzRQcQ==
#测试
siqUrl: http://egbpub.siqhz.com/egb/api/thirdauth
code: zfjdm
# secretKey: eWIzY3BMRVNEQXhvUUlXMA==
# secretKey: ENC(zTr/tj2VgFxQyunI4eIL7NyRWDPSMPSB0VlwTYeHTdsEWyu1H96xWw==)
secretKey: SXRpWEhVN3RHM3ZFbzRQcQ==
secretKey: ENC(zTr/tj2VgFxQyunI4eIL7NyRWDPSMPSB0VlwTYeHTdsEWyu1H96xWw==)
# 模拟数据开关(true=使用模拟数据,false=调用真实接口)
mock:
enabled: true

2
zdxt-web-server/zdxt-admin-web-server/src/main/resources/application.yml

@ -33,7 +33,7 @@ captcha:
# 日志配置
logging:
level:
org.dromara: @logging.level@
org.dromara: "${logging.level:debug}"
org.springframework: warn
org.mybatis.spring.mapper: debug
org.apache.fury: warn

Loading…
Cancel
Save