| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- package com.chuanghai.smartschool.tuitionpayment.utils;
- import org.springframework.boot.configurationprocessor.json.JSONObject;
- import org.springframework.util.StringUtils;
- import javax.crypto.Cipher;
- import javax.crypto.spec.SecretKeySpec;
- import java.security.MessageDigest;
- import java.util.Arrays;
- import java.util.Map;
- import java.util.Set;
- import java.util.TreeMap;
- /**
- * 农商行支付工具类
- *
- * Description
- * Create 2017-03-07 14:01:23
- *
- * @author Benny.YEE
- */
- public class JXNXSPayUtil {
- public static String SHA1(String decript) {
- try {
- MessageDigest digest = MessageDigest.getInstance("SHA-1");
- digest.update(decript.getBytes("UTF-8"));
- byte[] messageDigest = digest.digest();
- StringBuilder hexString = new StringBuilder();
- for (byte message : messageDigest) {
- String shaHex = Integer.toHexString(message & 0xFF);
- if (shaHex.length() < 2)
- hexString.append(0);
- hexString.append(shaHex);
- }
- return hexString.toString();
- } catch (Exception e) {
- e.printStackTrace();
- }
- return "";
- }
- /**
- * 签名
- *
- * @param data
- * @return
- */
- public static String sign(Map<String, String> data) {
- String sign = null;
- try {
- // A~z排序 (加上open_key)
- Set<String> keySet = data.keySet();
- String[] keyArray = keySet.toArray(new String[keySet.size()]);
- Arrays.sort(keyArray);
- StringBuilder sb = new StringBuilder();
- for (String k : keyArray) {
- if (k.equals("sign")) { // 删除sign节点
- continue;
- }
- sb.append(k).append("=").append(data.get(k).trim()).append("&");
- }
- String sbStr = sb.toString();
- String sortStr = sbStr.substring(0, sbStr.length() - 1);
- // sha1加密(小写)
- String sha1 = SHA1(sortStr).toLowerCase();
- // md5加密(小写)
- MessageDigest md5 = MessageDigest.getInstance("MD5");
- byte[] digest = md5.digest(sha1.getBytes("utf-8"));
- String resultString = byte2hex(digest);
- sign = resultString.toLowerCase();
- } catch (Exception e) {
- e.printStackTrace();
- }
- return sign;
- }
- /**
- * AES加密,再二进制转十六进制(bin2hex)
- * @param dataJsonStr 需要加密的字符串
- * @param key key
- * @throws Exception
- */
- public static String handleEncrypt(String dataJsonStr, String key) throws Exception {
- SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("ASCII"), "AES");
- Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
- cipher.init(1, skeySpec);
- byte[] encrypted = cipher.doFinal(dataJsonStr.getBytes("UTF-8"));
- return byte2hex(encrypted);
- }
- public static String decrypt(String sSrc, String sKey) throws Exception {
- SecretKeySpec skeySpec = new SecretKeySpec(sKey.getBytes("ASCII"), "AES");
- Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
- cipher.init(2, skeySpec);
- byte[] encrypted1 = hex2byte(sSrc);
- byte[] original = cipher.doFinal(encrypted1);
- return new String(original, "UTF-8");
- }
- /**
- * 验签
- *
- * @param params
- * @param key 农商openKey
- * @return
- */
- public static Boolean verifySign(Map<String, String> params, String key) {
- String respSign = params.get("sign");
- if (StringUtils.hasText(respSign)) {
- params.put("open_key", key);
- String veriSign = sign(params);
- if (respSign.equals(veriSign)) {
- return true;
- }
- }
- return false;
- }
- /**
- * byte数组转十六进制字符串
- */
- public static String byte2hex(byte[] result) {
- StringBuffer sb = new StringBuffer(result.length * 2);
- for (int i = 0; i < result.length; i++) {
- int hight = ((result[i] >> 4) & 0x0f);
- int low = result[i] & 0x0f;
- sb.append(hight > 9 ? (char) ((hight - 10) + 'a') : (char) (hight + '0'));
- sb.append(low > 9 ? (char) ((low - 10) + 'a') : (char) (low + '0'));
- }
- return sb.toString();
- }
- /**
- * 十六进制字符串转byte数组
- */
- public static byte[] hex2byte(String strhex) {
- if (strhex == null)
- return null;
- int l = strhex.length();
- if (l % 2 == 1)
- return null;
- byte[] b = new byte[l / 2];
- for (int i = 0; i != l / 2; ++i)
- b[i] = (byte) Integer.parseInt(strhex.substring(i * 2, i * 2 + 2), 16);
- return b;
- }
- }
|