package com.fengdu.gas.service;
|
|
import com.fengdu.gas.entity.request.test.TestPayVO;
|
import com.fengdu.gas.repository.po.TestInfoPO;
|
import com.fengdu.gas.service.convert.TestInfoConvert;
|
import com.fengdu.gas.common.ExecutedResult;
|
import com.fengdu.gas.common.PagerResult;
|
import com.fengdu.gas.common.enums.EYesOrNo;
|
import com.fengdu.gas.common.model.Tuple;
|
import com.fengdu.gas.common.util.*;
|
import com.fengdu.gas.entity.enums.EState;
|
import com.fengdu.gas.entity.request.ReqListSetSort;
|
import com.fengdu.gas.entity.request.ReqSetSort;
|
import com.fengdu.gas.entity.request.test.ReqCreateTestInfo;
|
import com.fengdu.gas.entity.request.test.ReqModifyTestInfo;
|
import com.fengdu.gas.entity.search.SearchTestInfo;
|
import com.fengdu.gas.repository.impl.TestInfoMapperImpl;
|
import com.fengdu.gas.repository.vo.TestInfoVO;
|
import com.google.gson.Gson;
|
import org.apache.commons.lang3.BooleanUtils;
|
import org.apache.http.HttpStatus;
|
import org.apache.http.client.entity.UrlEncodedFormEntity;
|
import org.apache.http.client.methods.CloseableHttpResponse;
|
import org.apache.http.client.methods.HttpPost;
|
import org.apache.http.entity.StringEntity;
|
import org.apache.http.impl.client.CloseableHttpClient;
|
import org.apache.http.impl.client.HttpClients;
|
import org.apache.http.message.BasicNameValuePair;
|
import org.apache.http.util.EntityUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
import javax.crypto.Cipher;
|
import javax.crypto.KeyGenerator;
|
import javax.crypto.SecretKey;
|
import java.io.*;
|
import java.net.HttpURLConnection;
|
import java.net.URL;
|
import java.security.KeyStore;
|
import java.security.NoSuchAlgorithmException;
|
import java.security.Signature;
|
import java.security.interfaces.RSAPrivateCrtKey;
|
import java.util.*;
|
import java.util.stream.Collectors;
|
|
/**
|
* 测试信息 相关服务
|
*/
|
@Service
|
public class TestInfoService extends BaseService {
|
@Autowired
|
private TestInfoMapperImpl mapper;
|
//私钥
|
private final static String PRIVATE_KEY="";
|
private final static String PASSWORD="";
|
|
/**
|
* AES256加密
|
* @param data
|
* @return
|
* @throws Exception
|
*/
|
public String AES256(String data) throws Exception {
|
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
|
keyGenerator.init(256); // 初始化密钥生成器,指定AES-256
|
SecretKey key = keyGenerator.generateKey();
|
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
|
cipher.init(Cipher.ENCRYPT_MODE, key);
|
byte[] encrypted = cipher.doFinal(data.getBytes("UTF-8"));
|
return Base64.getEncoder().encodeToString(encrypted);
|
}
|
|
/**
|
* Base64加密
|
* @param data
|
* @return
|
*/
|
public String Base64(String data) {
|
String encodedString = Base64.getEncoder().encodeToString(data.getBytes());
|
return encodedString;
|
}
|
public static String getKeyAndValueStr(Map<String, String> map) {
|
String result = "";
|
try {
|
List<Map.Entry<String, String>> infoIds = new ArrayList<>(map.entrySet());
|
// 对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序)
|
Collections.sort(infoIds, Comparator.comparing(Map.Entry::getKey));
|
// 构造签名键值对的格式
|
StringBuilder sb = new StringBuilder();
|
for (Map.Entry<String, String> item : infoIds) {
|
if (item.getKey() != null && item.getKey() != "") {
|
String key = item.getKey();
|
String val = item.getValue();
|
if (!(val == "" || val == null)) {
|
sb.append(key + "=" + val + "&");
|
}
|
}
|
}
|
result = sb.toString().substring(0, sb.length() - 1);
|
} catch (Exception e) {
|
return null;
|
}
|
return result;
|
}
|
|
|
|
|
/**
|
* 签名处理
|
* @param privateKeyPath:私钥
|
* @param plaintext:原始字符串
|
* @param passWord:证书密码
|
* @param charset :UTF-8
|
* @return
|
*/
|
public String signMsg(String plaintext, String privateKeyPath, String passWord, String charset) {
|
try {
|
InputStream keyFile = new FileInputStream(new File(privateKeyPath));
|
KeyStore ks = KeyStore.getInstance("PKCS12");
|
try {
|
ks.load(keyFile, passWord.toCharArray());
|
} catch (Throwable ex) {
|
if (keyFile != null)
|
keyFile.close();
|
throw new RuntimeException("加载私钥失败",ex);
|
}
|
Enumeration<String> myEnum = ks.aliases();
|
String keyAlias = null;
|
RSAPrivateCrtKey prikey = null;
|
/* IBM JDK必须使用While循环取最后一个别名,才能得到个人私钥别名 */
|
while (myEnum.hasMoreElements()) {
|
keyAlias = myEnum.nextElement();
|
if (ks.isKeyEntry(keyAlias)) {
|
prikey = (RSAPrivateCrtKey) ks.getKey(keyAlias, passWord.toCharArray());
|
break;
|
}
|
}
|
if (prikey == null) {
|
throw new RuntimeException("没有找到匹配私钥");
|
} else {
|
Signature sign = Signature.getInstance("SHA256withRSA");
|
sign.initSign(prikey);
|
sign.update(plaintext.getBytes(charset));
|
return org.apache.commons.codec.binary.Base64.encodeBase64String(sign.sign());
|
}
|
} catch (RuntimeException e) {
|
throw e;
|
} catch (Throwable e) {
|
throw new RuntimeException("签名失败",e);
|
}
|
}
|
}
|