Merge remote-tracking branch 'origin/master'
commit
f07a4b1df6
@ -0,0 +1,27 @@
|
|||||||
|
package com.baiye.constant;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 有关加解密的常量类
|
||||||
|
*/
|
||||||
|
public class SecretConstant {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* yuyou address
|
||||||
|
*/
|
||||||
|
public static final String SECRET_DECRYPT_YY_URL = "https://bd.hzdaba.cn:8085/v3/Accounts/yuyou_bd/BigData/DecryptTel";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* yuyou sign
|
||||||
|
*/
|
||||||
|
public static final String SECRET_DECRYPT_YY_SIG = "7f49e3f9c17c0f3c8fca84168161ed37";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* yuyou id
|
||||||
|
*/
|
||||||
|
public static final String SECRET_DECRYPT_YY_ID = "yuyou_bd";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 时间戳格式
|
||||||
|
*/
|
||||||
|
public static final String SECRET_DECRYPT_TIME_FORMATE = "yyyyMMddHHmmss";
|
||||||
|
}
|
@ -0,0 +1,43 @@
|
|||||||
|
package com.baiye.pojo;
|
||||||
|
|
||||||
|
public class SecretResponseBean {
|
||||||
|
|
||||||
|
private String result;
|
||||||
|
|
||||||
|
private String reason;
|
||||||
|
|
||||||
|
private String tels;
|
||||||
|
|
||||||
|
public String getResult() {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setResult(String result) {
|
||||||
|
this.result = result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getReason() {
|
||||||
|
return reason;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setReason(String reason) {
|
||||||
|
this.reason = reason;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTels() {
|
||||||
|
return tels;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTels(String tels) {
|
||||||
|
this.tels = tels;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "SecretResponseBean{" +
|
||||||
|
"result='" + result + '\'' +
|
||||||
|
", reason='" + reason + '\'' +
|
||||||
|
", tels='" + tels + '\'' +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,106 @@
|
|||||||
|
package com.baiye.util;
|
||||||
|
|
||||||
|
import cn.hutool.core.codec.Base64;
|
||||||
|
import cn.hutool.core.collection.ListUtil;
|
||||||
|
import cn.hutool.core.date.DateUtil;
|
||||||
|
import cn.hutool.core.text.StrPool;
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import cn.hutool.crypto.SecureUtil;
|
||||||
|
import cn.hutool.http.Header;
|
||||||
|
import cn.hutool.http.HttpRequest;
|
||||||
|
import cn.hutool.json.JSONUtil;
|
||||||
|
import com.baiye.constant.DefaultNumberConstants;
|
||||||
|
import com.baiye.constant.SecretConstant;
|
||||||
|
import com.baiye.pojo.SecretResponseBean;
|
||||||
|
import com.google.common.base.Joiner;
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author jt
|
||||||
|
*/
|
||||||
|
@Slf4j
|
||||||
|
public class DecryptPnoUtil {
|
||||||
|
private static final String HTTP_RESPONSE_JSON_FORMATE = "application/x-www-form-urlencoded";
|
||||||
|
|
||||||
|
public static String decryptPno(String origins) {
|
||||||
|
HashMap<String, Object> paramMap = new HashMap<>();
|
||||||
|
paramMap.put("sig", createSig());
|
||||||
|
paramMap.put("appid", SecretConstant.SECRET_DECRYPT_YY_ID);
|
||||||
|
paramMap.put("tels", Base64.encode(origins));
|
||||||
|
//链式构建请求
|
||||||
|
String result = HttpRequest.post(SecretConstant.SECRET_DECRYPT_YY_URL)
|
||||||
|
.header(Header.CONTENT_TYPE, HTTP_RESPONSE_JSON_FORMATE)
|
||||||
|
.form(paramMap)
|
||||||
|
.timeout(2_000)
|
||||||
|
.execute().body();
|
||||||
|
SecretResponseBean secretResponseBean = JSONUtil.toBean(result, SecretResponseBean.class);
|
||||||
|
return Base64.decodeStr(secretResponseBean.getTels());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生成 sig 值
|
||||||
|
*
|
||||||
|
* @return sig
|
||||||
|
*/
|
||||||
|
private static String createSig() {
|
||||||
|
return SecureUtil.md5(
|
||||||
|
SecretConstant.SECRET_DECRYPT_YY_ID
|
||||||
|
+ SecretConstant.SECRET_DECRYPT_YY_SIG
|
||||||
|
+ DateUtil.format(new Date(), SecretConstant.SECRET_DECRYPT_TIME_FORMATE));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量解密
|
||||||
|
*
|
||||||
|
* @param origins 待处理的加密数据
|
||||||
|
* @return 处理后的解密数据
|
||||||
|
*/
|
||||||
|
public static SecretResponseBean batchDecryptPno(String origins) {
|
||||||
|
|
||||||
|
|
||||||
|
HashMap<String, Object> paramMap = new HashMap<>();
|
||||||
|
paramMap.put("sig", createSig());
|
||||||
|
paramMap.put("appid", SecretConstant.SECRET_DECRYPT_YY_ID);
|
||||||
|
paramMap.put("tels", origins);
|
||||||
|
|
||||||
|
//链式构建请求
|
||||||
|
String result = HttpRequest.post(SecretConstant.SECRET_DECRYPT_YY_URL)
|
||||||
|
.header(Header.CONTENT_TYPE, HTTP_RESPONSE_JSON_FORMATE)
|
||||||
|
.form(paramMap)
|
||||||
|
.timeout(2_000)
|
||||||
|
.execute().body();
|
||||||
|
// 解析响应内容
|
||||||
|
return JSONUtil.toBean(result, SecretResponseBean.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<String> decryptPhoneList(List<String> phoneSets) {
|
||||||
|
List<String> decryptList = Lists.newArrayList();
|
||||||
|
// 集合分割
|
||||||
|
List<List<String>> partitions = ListUtil.partition(phoneSets, DefaultNumberConstants.TWO_HUNDRED);
|
||||||
|
for (List<String> partition : partitions) {
|
||||||
|
String join = Joiner.on(StrPool.COMMA).skipNulls().join(partition);
|
||||||
|
// 批量解析号码
|
||||||
|
SecretResponseBean responseBean = DecryptPnoUtil.batchDecryptPno
|
||||||
|
(Base64.encode(StringUtils.substringBeforeLast(join, StrPool.COMMA)));
|
||||||
|
if (ObjectUtil.isNotNull(responseBean) && ObjectUtil.isNotNull(responseBean.getTels())) {
|
||||||
|
String decodeStr = Base64.decodeStr(responseBean.getTels());
|
||||||
|
String[] split = decodeStr.split(StrPool.COMMA);
|
||||||
|
if (split.length > DefaultNumberConstants.ZERO_NUMBER) {
|
||||||
|
decryptList.addAll(Lists.newArrayList(Arrays.asList(split)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return decryptList;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue