diff --git a/zdxt-common/zdxt-common-encrypt/src/main/java/org/dromara/common/encrypt/config/CustomEncryptorConfig.java b/zdxt-common/zdxt-common-encrypt/src/main/java/org/dromara/common/encrypt/config/CustomEncryptorConfig.java index 2d091de8..c4da4b3a 100644 --- a/zdxt-common/zdxt-common-encrypt/src/main/java/org/dromara/common/encrypt/config/CustomEncryptorConfig.java +++ b/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; +// } } diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/common/config/RuoYiConfig.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/common/config/RuoYiConfig.java index b136eea3..03f6b453 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/common/config/RuoYiConfig.java +++ b/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; + } + + /** * 获取上传路径(兼容旧代码) */ diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/common/config/SiqConfig.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/common/config/SiqConfig.java new file mode 100644 index 00000000..2683aa75 --- /dev/null +++ b/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; + } +} diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/common/util/IdCardCryptoUtil.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/common/util/IdCardCryptoUtil.java index 3bed1789..db1e7dc1 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/common/util/IdCardCryptoUtil.java +++ b/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) { diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/common/util/jasypt/JasyptUtils.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/common/util/jasypt/JasyptUtils.java new file mode 100644 index 00000000..49ac3cc4 --- /dev/null +++ b/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); + } +} diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EnterpriseUserServiceImpl.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EnterpriseUserServiceImpl.java index 809fddd0..3ef60aa2 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EnterpriseUserServiceImpl.java +++ b/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 updateWrapper = new LambdaUpdateWrapper<>(); + // 调试:打印密钥信息 + String secretKey = siqConfig.getSecretKey(); + // 加密手机号 + String newPhoneNumber = IdCardCryptoUtil.symmetricEncryptIdCard(secretKey, phoneNumber); + LambdaUpdateWrapper 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) { diff --git a/zdxt-web-server/zdxt-admin-web-server/src/main/resources/application-dev.yml b/zdxt-web-server/zdxt-admin-web-server/src/main/resources/application-dev.yml index 54e608ad..db20bb53 100644 --- a/zdxt-web-server/zdxt-admin-web-server/src/main/resources/application-dev.yml +++ b/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 diff --git a/zdxt-web-server/zdxt-admin-web-server/src/main/resources/application.yml b/zdxt-web-server/zdxt-admin-web-server/src/main/resources/application.yml index 4da2e839..3cf71a1f 100644 --- a/zdxt-web-server/zdxt-admin-web-server/src/main/resources/application.yml +++ b/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