wisdomisite-java/src/main/java/com/zhgd/xmgl/util/NanchangHousingUtils.java

135 lines
4.4 KiB
Java
Raw Normal View History

2023-02-16 15:28:15 +08:00
package com.zhgd.xmgl.util;
import com.zhgd.xmgl.entity.vo.NanchangHousingBean;
2024-04-14 21:05:01 +08:00
import lombok.extern.slf4j.Slf4j;
2023-02-16 15:28:15 +08:00
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang.StringUtils;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import javax.validation.constraints.NotNull;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.security.Security;
import java.security.spec.AlgorithmParameterSpec;
import java.util.*;
/**
* @program: wisdomSite
* @description: 南昌住建局工具类
* @author: Mr.Peng
* @create: 2021-07-05 17:10
**/
2024-04-14 21:05:01 +08:00
@Slf4j
2023-02-16 15:28:15 +08:00
public class NanchangHousingUtils {
private static final String CHARSET_NAME = "UTF-8";
private static final String AES_NAME = "AES";
public static final String ALGORITHM = "AES/CBC/PKCS7Padding";
static {
Security.addProvider(new BouncyCastleProvider());
}
/**
* 加密
*
* @param content
* @param key
* @return
*/
public static String encrypt(@NotNull String content, @NotNull String key) {
byte[] result = null;
try {
Cipher cipher = Cipher.getInstance(ALGORITHM);
SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(CHARSET_NAME), AES_NAME);
AlgorithmParameterSpec paramSpec = new IvParameterSpec(
subBytes(key.getBytes(CHARSET_NAME)));
cipher.init(Cipher.ENCRYPT_MODE, keySpec, paramSpec);
result = cipher.doFinal(content.getBytes(CHARSET_NAME));
} catch (Exception ex) {
ex.printStackTrace();
}
return Base64.encodeBase64String(result);
}
/**
* 解密
*
* @param content
* @param key
* @return
*/
public static String decrypt(@NotNull String content, @NotNull String key) {
try {
Cipher cipher = Cipher.getInstance(ALGORITHM);
SecretKeySpec keySpec = new SecretKeySpec(key.getBytes(CHARSET_NAME), AES_NAME);
AlgorithmParameterSpec paramSpec = new IvParameterSpec(
subBytes(key.getBytes(CHARSET_NAME)));
cipher.init(Cipher.DECRYPT_MODE, keySpec, paramSpec);
return new String(cipher.doFinal(Base64.decodeBase64(content)), CHARSET_NAME);
} catch (Exception ex) {
ex.printStackTrace();
}
return StringUtils.EMPTY;
}
/**
* 从一个byte[]数组中截取一部分
*
* @param src
* @return
*/
public static byte[] subBytes(byte[] src) {
if (src.length < 16) {
throw new RuntimeException("无法从Key中获取偏移量!");
}
byte[] bs = new byte[16];
for (int i = 0; i < 16; i++) {
bs[i] = src[i];
}
return bs;
}
public static String getSing(NanchangHousingBean bean) {
//listMap示例
List<Map> listMap = new ArrayList<>();
/*Map<String, String> testMap = new HashMap<>(16);
testMap.put("name", "张三");
testMap.put("code", "123456");*/
listMap.add(bean.getData());
//加密秘钥
String secret = bean.getSecret();
String appKey = bean.getAppKey();
//拼装字符串
StringBuilder sb = new StringBuilder();
TreeMap<String, String> map = new TreeMap<String, String>(listMap.get(0));
for (Map.Entry<String, String> e : map.entrySet()) {
if (StringUtils.isNotBlank(e.getValue()) && !"headImage".equals(e.getKey()) && !"image".equals(e.getKey())) {
sb.append(e.getKey()).append("=").append(e.getValue()).append("&");
}
}
sb.append("appKey=").append(appKey);
//生成签名
String signCheck = NanchangHousingUtils.encrypt(sb.toString(), secret).toUpperCase();
try {
//转义
signCheck = URLEncoder.encode(signCheck, "UTF-8")
.replaceAll("\\+", "%20")
.replaceAll("\\!", "%21")
.replaceAll("\\'", "%27")
.replaceAll("\\(", "%28")
.replaceAll("\\)", "%29")
.replaceAll("\\~", "%7E");
} catch (UnsupportedEncodingException e) {
2024-04-14 21:05:01 +08:00
log.error("error", e);
2023-02-16 15:28:15 +08:00
}
return signCheck;
}
}