weaver-hrm-salary/src/com/engine/salary/encrypt/AESEncryptUtil.java

139 lines
4.9 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.engine.salary.encrypt;
import com.engine.salary.sys.constant.SalarySysConstant;
import com.engine.salary.sys.entity.po.SalarySysConfPO;
import com.engine.salary.sys.enums.OpenEnum;
import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl;
import com.wbi.util.StringUtil;
import org.apache.commons.lang3.StringUtils;
import weaver.general.AES;
import weaver.general.BaseBean;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 此AES加密工具类仅用于关联应用设置中是否开启加密的应用使用
* 如另有需要,请重写工具类
*/
public class AESEncryptUtil {
static BaseBean bb = new BaseBean();
static String aesEncryptScrect = bb.getPropValue("hrmSalary", "AESEncryptScrect");
static SalarySysConfServiceImpl salarySysConfService = new SalarySysConfServiceImpl();
/**
* AES加密
*
* @param source 原始数据
* @return 加密数据
*/
public static String encrypt(String source) {
String isEncrypt = getSalarySysConfigValue();
//防止初始化老数据时二次加密
if (StringUtils.isNotBlank(source) && OpenEnum.OPEN.getValue().equals(isEncrypt) && !source.startsWith(SalarySysConstant.PRE_SIGN_ENCRYPT)) {
return SalarySysConstant.PRE_SIGN_ENCRYPT + AES.encrypt(source, aesEncryptScrect);
}
return source;
}
/**
* 应用设置是否开启加密
*
* @return
*/
private static String getSalarySysConfigValue() {
SalarySysConfPO sysConfPO = salarySysConfService.getOneByCode(SalarySysConstant.OPEN_APPLICATION_ENCRYPT);
if (sysConfPO == null) {
return "1";
}
return sysConfPO.getConfValue();
}
/**
* AES解密
*
* @param encryptStr 加密字符串
* @return 解密字符串
*/
public static String decrypt(String encryptStr) {
SalarySysConfPO sysConfPo = salarySysConfService.getOneByCode(SalarySysConstant.OPEN_APPLICATION_ENCRYPT);
if (StringUtils.isNotBlank(encryptStr)) {
if (encryptStr.startsWith(SalarySysConstant.PRE_SIGN_ENCRYPT)) {
encryptStr = encryptStr.substring(4, encryptStr.length());
return AES.decrypt(encryptStr, aesEncryptScrect);
}
//第一版没有加AES_前缀为加密标识所以初始解密时需要根据是否有配置判断是否需要解密
//未配置加密设置时,需要解密
if (sysConfPo == null) {
return AES.decrypt(encryptStr, aesEncryptScrect);
}
}
return encryptStr;
}
/**
* 用于关闭加密设置后AES解密
*
* @param encryptStr 加密字符串
* @return 解密字符串
*/
public static String closeEncryptSetting(String encryptStr) {
SalarySysConfPO sysConfPo = salarySysConfService.getOneByCode(SalarySysConstant.OPEN_APPLICATION_ENCRYPT);
// if (StringUtils.isNotBlank(encryptStr) && encryptStr.startsWith(SalarySysConstant.PRE_SIGN_ENCRYPT)) {
// encryptStr = encryptStr.substring(4, encryptStr.length());
// return AES.decrypt(encryptStr, aesEncryptScrect);
// } else if (sysConfPo == null && StringUtils.isNotBlank(encryptStr)) {
// return AES.decrypt(encryptStr, aesEncryptScrect);
// }
// return encryptStr;
if (encryptStr == null) {
return null;
} else {
//AES_前缀的密文
if (encryptStr.startsWith(SalarySysConstant.PRE_SIGN_ENCRYPT)) {
encryptStr = encryptStr.substring(4, encryptStr.length());
return AES.decrypt(encryptStr, aesEncryptScrect);
} else if (isNumeric(encryptStr) || checkHaveChinese(encryptStr) || encryptStr.startsWith("{") || encryptStr.contains("-") || encryptStr.contains(".")) {
return encryptStr;
} else if ("null".equals(encryptStr) || StringUtils.isBlank(encryptStr)) {
return encryptStr;
} else if (sysConfPo == null || sysConfPo.getConfValue().equals(OpenEnum.OFF.getValue())) {
return AES.decrypt(encryptStr, aesEncryptScrect);
} else {
return encryptStr;
}
}
}
/**
* 判断字符串是否为整数或者小数或者负数
*/
public static boolean isNumeric(String str) {
Pattern pattern = Pattern.compile("^-?\\d+(\\.\\d+)?$");
Matcher isNum = pattern.matcher(str);
if (!isNum.matches()) {
return false;
}
return true;
}
/**
* 判断字符串是否包含中文字符
*/
public static boolean checkHaveChinese(String countname) {
Pattern p = Pattern.compile("[\u4e00-\u9fa5]");
Matcher m = p.matcher(countname);
if (m.find()) {
return true;
}
return false;
}
}