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 map) { String result = ""; try { List> infoIds = new ArrayList<>(map.entrySet()); // 对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序) Collections.sort(infoIds, Comparator.comparing(Map.Entry::getKey)); // 构造签名键值对的格式 StringBuilder sb = new StringBuilder(); for (Map.Entry 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 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); } } }