parent
4d5a46b87e
commit
56898f741e
@ -0,0 +1,178 @@ |
|||||||
|
package com.hai.config; |
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSON; |
||||||
|
import com.alibaba.fastjson.JSONObject; |
||||||
|
import com.hai.common.pay.util.sdk.WXPayConstants; |
||||||
|
import com.hai.common.utils.HttpsUtils; |
||||||
|
import com.hai.common.utils.MD5Util; |
||||||
|
import com.hai.common.utils.WxUtils; |
||||||
|
import org.apache.commons.collections4.MapUtils; |
||||||
|
import org.apache.commons.lang3.StringUtils; |
||||||
|
import sun.misc.BASE64Decoder; |
||||||
|
import sun.misc.BASE64Encoder; |
||||||
|
|
||||||
|
import javax.crypto.Cipher; |
||||||
|
import javax.crypto.spec.SecretKeySpec; |
||||||
|
import java.io.UnsupportedEncodingException; |
||||||
|
import java.security.MessageDigest; |
||||||
|
import java.util.*; |
||||||
|
|
||||||
|
/** |
||||||
|
* @author hurui |
||||||
|
* @version 1.0 |
||||||
|
* @ClassName QianZhuConfig |
||||||
|
* @description: 汇联通接口配置 |
||||||
|
* @date 2021/7/5 14:18 |
||||||
|
*/ |
||||||
|
public class HuiLianTongConfig { |
||||||
|
|
||||||
|
/** |
||||||
|
* 获取token |
||||||
|
* @return |
||||||
|
* @throws Exception |
||||||
|
*/ |
||||||
|
public static JSONObject getToken() throws Exception { |
||||||
|
Map<String,Object> map = new HashMap<>(); |
||||||
|
map.put("appNo", "gzhltcs"); |
||||||
|
map.put("appKey", MD5Util.encode("3SCg%2BNnjR54YSUWM2iKgb5Hmdqg0ze4ciZ5kUTzVduWgasPdO3g5egbLYZMAIA3obS7f6Q7hycqkEBNQ2fx8i5qlGAoZcYtiqdBrofYPtqXpLexLrhg%2Bcqti%2BcpOd0xDc2VWEWvFJbxJ1%2Fd82A9x9hg2kYV7CTK9jdZsDL1eoZln0lcCuuaqYpTsfCnZ9pi86jC6rBii4POp4YOHITOA4ryGQGwzoQQt".getBytes())); |
||||||
|
return HttpsUtils.doPost("https://gzapitest.deepermobile.com.cn:441/api/api/auth/getAccessToken", JSON.toJSONString(map)); |
||||||
|
} |
||||||
|
|
||||||
|
public static String get3DESEncryptECB(String src,String secretKey) { |
||||||
|
try { |
||||||
|
Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding"); |
||||||
|
cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(build3DesKey(secretKey), "DESede")); |
||||||
|
String base64Encode = getBase64Encode(cipher.doFinal(src.getBytes("UTF-8"))); |
||||||
|
return filter(base64Encode); |
||||||
|
} catch (Exception ex) { |
||||||
|
//加密失败,打日志
|
||||||
|
// //logger.error(ex,ex);
|
||||||
|
} |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
public static String get3DESDecryptECB(String src,String secretKey){ |
||||||
|
try { |
||||||
|
Cipher cipher = Cipher.getInstance("DESede/ECB/PKCS5Padding"); |
||||||
|
cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(build3DesKey(secretKey), "DESede")); |
||||||
|
byte[] base64DValue = getBase64Decode(src); |
||||||
|
byte ciphertext[] = cipher.doFinal(base64DValue); |
||||||
|
return new String(ciphertext, "UTF-8"); |
||||||
|
} catch (Exception e) { |
||||||
|
//解密失败,打日志
|
||||||
|
// //logger.error(e,e);
|
||||||
|
} |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
/* |
||||||
|
* 根据字符串生成密钥字节数组 |
||||||
|
* @param keyStr 密钥字符串 |
||||||
|
* @return |
||||||
|
* @throws UnsupportedEncodingException |
||||||
|
*/ |
||||||
|
public static byte[] build3DesKey(String keyStr) throws UnsupportedEncodingException { |
||||||
|
byte[] key = new byte[24]; //声明一个24位的字节数组,默认里面都是0
|
||||||
|
byte[] temp = keyStr.getBytes("UTF-8"); //将字符串转成字节数组
|
||||||
|
|
||||||
|
/* |
||||||
|
* 执行数组拷贝 |
||||||
|
* System.arraycopy(源数组,从源数组哪里开始拷贝,目标数组,拷贝多少位) |
||||||
|
*/ |
||||||
|
if(key.length > temp.length){ |
||||||
|
//如果temp不够24位,则拷贝temp数组整个长度的内容到key数组中
|
||||||
|
System.arraycopy(temp, 0, key, 0, temp.length); |
||||||
|
}else{ |
||||||
|
//如果temp大于24位,则拷贝temp数组24个长度的内容到key数组中
|
||||||
|
System.arraycopy(temp, 0, key, 0, key.length); |
||||||
|
} |
||||||
|
return key; |
||||||
|
} |
||||||
|
/** |
||||||
|
* 对字符串进行Base64编码 |
||||||
|
* |
||||||
|
* |
||||||
|
* @return String 进行编码后的字符串 |
||||||
|
*/ |
||||||
|
|
||||||
|
public static String getBase64Encode(byte[] src) { |
||||||
|
String requestValue = ""; |
||||||
|
try { |
||||||
|
BASE64Encoder base64en = new BASE64Encoder(); |
||||||
|
requestValue = filter(base64en.encode(src)); |
||||||
|
// //logger.debug(requestValue);
|
||||||
|
} catch (Exception e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
|
||||||
|
return requestValue; |
||||||
|
} |
||||||
|
|
||||||
|
public static byte[] getBase64Decode(String str) { |
||||||
|
byte[] src = null; |
||||||
|
|
||||||
|
try { |
||||||
|
BASE64Decoder base64de = new BASE64Decoder(); |
||||||
|
src = base64de.decodeBuffer(str); |
||||||
|
} catch (Exception var3) { |
||||||
|
var3.printStackTrace(); |
||||||
|
} |
||||||
|
|
||||||
|
return src; |
||||||
|
} |
||||||
|
|
||||||
|
private static String filter(String str) { |
||||||
|
String output = null; |
||||||
|
StringBuffer sb = new StringBuffer(); |
||||||
|
for (int i = 0; i < str.length(); i++) { |
||||||
|
int asc = str.charAt(i); |
||||||
|
if (asc != 10 && asc != 13) |
||||||
|
sb.append(str.subSequence(i, i + 1)); |
||||||
|
} |
||||||
|
output = new String(sb); |
||||||
|
return output; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 大写 |
||||||
|
* @param s |
||||||
|
* @return |
||||||
|
*/ |
||||||
|
public static String md5Capital(String s){ |
||||||
|
char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; |
||||||
|
try { |
||||||
|
byte[] strTemp = s.getBytes(); |
||||||
|
//使用MD5创建MessageDigest对象
|
||||||
|
MessageDigest mdTemp = MessageDigest.getInstance("MD5"); |
||||||
|
mdTemp.update(strTemp); |
||||||
|
byte[] md = mdTemp.digest(); |
||||||
|
int j = md.length; |
||||||
|
char str[] = new char[j * 2]; |
||||||
|
int k = 0; |
||||||
|
for (int i = 0; i < j; i++) { |
||||||
|
byte b = md[i]; |
||||||
|
////logger.debug((int)b);
|
||||||
|
//将没个数(int)b进行双字节加密
|
||||||
|
str[k++] = hexDigits[b >> 4 & 0xf]; |
||||||
|
str[k++] = hexDigits[b & 0xf]; |
||||||
|
} |
||||||
|
return new String(str); |
||||||
|
} catch (Exception e) {return null;} |
||||||
|
} |
||||||
|
/* |
||||||
|
测试实例: |
||||||
|
String appkey = "q[*^%]#%675f"; |
||||||
|
String param = "{\"phone\":\"18550231381\"}"; |
||||||
|
String secretKey = "7EFD6D5D7052E29B4FBC4AD75CA737ED"; |
||||||
|
String jsonData = Coder.get3DESEncryptECB(param, appkey); |
||||||
|
System.out.println("jsonData:" + jsonData); |
||||||
|
|
||||||
|
StringJoiner joiner = new StringJoiner("&"); |
||||||
|
joiner.add("jsonData=" + param); |
||||||
|
joiner.add("secretKey=" + secretKey); |
||||||
|
String sign = Coder.md5Capital(joiner.toString()); |
||||||
|
System.out.println("sign:" + sign); |
||||||
|
|
||||||
|
jsonData:aOF3MZAENbJE/t+r4P0+RQGfhSEa5Hyq |
||||||
|
sign:835A267FCA8D36C6F79E308F18AECEE8*/ |
||||||
|
} |
Loading…
Reference in new issue