'提交代碼'

dev-discount
胡锐 3 years ago
parent ad525e82b3
commit c634bd69c1
  1. 1
      hai-bweb/src/main/java/com/bweb/controller/HighCouponController.java
  2. 249
      hai-service/src/main/java/com/hai/common/security/DESUtil.java
  3. 10
      hai-service/src/main/java/com/hai/config/HuiLianTongUnionCardConfig.java

@ -596,6 +596,7 @@ public class HighCouponController {
// 查询电子卡券类型 // 查询电子卡券类型
JSONObject corpCouTypes = HuiLianTongConfig.getCorpCouTypes(tokenObject.getString("data")); JSONObject corpCouTypes = HuiLianTongConfig.getCorpCouTypes(tokenObject.getString("data"));
System.out.println(corpCouTypes.toJSONString());
if (!corpCouTypes.getString("result").equals("success")) { if (!corpCouTypes.getString("result").equals("success")) {
log.error("HighCouponController -> insertCoupon() error!","获取电子卡券列表失败"); log.error("HighCouponController -> insertCoupon() error!","获取电子卡券列表失败");
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "获取电子卡券列表失败"); throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "获取电子卡券列表失败");

@ -1,148 +1,173 @@
package com.hai.common.security; package com.hai.common.security;
import java.io.*;
import java.security.Key; import java.security.Key;
import java.security.SecureRandom; import java.security.SecureRandom;
import java.security.Security; import java.security.Security;
import javax.crypto.Cipher; import javax.crypto.*;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec; import javax.crypto.spec.DESKeySpec;
import javax.crypto.spec.IvParameterSpec;
import org.apache.commons.codec.binary.Base64; import java.util.Base64;
import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.bouncycastle.jce.provider.BouncyCastleProvider;
public class DESUtil {
/**
* DES安全编码组件
*
* @author wbw
* @version 1.0
*/
public abstract class DESUtil {
static{
Security.insertProviderAt(new BouncyCastleProvider(), 1);
}
/** /**
* 密钥算法 <br> * 偏移变量固定占8位字节
* Java 6 只支持56bit密钥 <br>
* Bouncy Castle 支持64bit密钥
*/ */
public static final String KEY_ALGORITHM = "DES"; private final static String IV_PARAMETER = "12345678";
/**
* 密钥算法
*/
private static final String ALGORITHM = "DES";
/** /**
* 加密/解密算法 / 工作模式 / 填充方式 * 加密/解密算法-工作模式-填充模式
*/ */
public static final String CIPHER_ALGORITHM = "DES/ECB/PKCS5PADDING"; private static final String CIPHER_ALGORITHM = "DES/CBC/PKCS5Padding";
/**
* 默认编码
*/
private static final String CHARSET = "utf-8";
/** /**
* 转换密钥 * 生成key
* *
* @param key * @param password
* 二进制密钥 * @return
* @return Key 密钥
* @throws Exception * @throws Exception
*/ */
private static Key toKey(byte[] key) throws Exception { private static Key generateKey(String password) throws Exception {
DESKeySpec dks = new DESKeySpec(password.getBytes(CHARSET));
// 实例化DES密钥材料 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);
DESKeySpec dks = new DESKeySpec(key); return keyFactory.generateSecret(dks);
// 实例化秘密密钥工厂
SecretKeyFactory keyFactory = SecretKeyFactory
.getInstance(KEY_ALGORITHM);
// 生成秘密密钥
SecretKey secretKey = keyFactory.generateSecret(dks);
return secretKey;
} }
/** /**
* 解密 * DES加密字符串
* *
* @param data * @param password 加密密码长度不能够小于8位
* 待解密数据 * @param data 待加密字符串
* @param key * @return 加密后内容
* 密钥
* @return byte[] 解密数据
* @throws Exception
*/ */
public static byte[] decrypt(byte[] data, byte[] key) throws Exception { public static String encrypt(String password, String data) {
if (password== null || password.length() < 8) {
// 还原密钥 throw new RuntimeException("加密失败,key不能小于8位");
Key k = toKey(key); }
if (data == null)
// 实例化 return null;
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM); try {
Key secretKey = generateKey(password);
// 初始化,设置为解密模式 Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, k); IvParameterSpec iv = new IvParameterSpec(IV_PARAMETER.getBytes(CHARSET));
cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);
// 执行操作 byte[] bytes = cipher.doFinal(data.getBytes(CHARSET));
return cipher.doFinal(data);
//JDK1.8及以上可直接使用Base64,JDK1.7及以下可以使用BASE64Encoder
//Android平台可以使用android.util.Base64
return new String(Base64.getEncoder().encode(bytes));
} catch (Exception e) {
e.printStackTrace();
return data;
}
} }
/** /**
* 加密 * DES解密字符串
* *
* @param data * @param password 解密密码长度不能够小于8位
* 待加密数据 * @param data 待解密字符串
* @param key * @return 解密后内容
* 密钥
* @return byte[] 加密数据
* @throws Exception
*/ */
public static byte[] encrypt(byte[] data, byte[] key) throws Exception { public static String decrypt(String password, String data) {
if (password== null || password.length() < 8) {
// 还原密钥 throw new RuntimeException("加密失败,key不能小于8位");
Key k = toKey(key); }
if (data == null)
// 实例化 return null;
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM); try {
Key secretKey = generateKey(password);
// 初始化,设置为加密模式 Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, k); IvParameterSpec iv = new IvParameterSpec(IV_PARAMETER.getBytes(CHARSET));
cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);
// 执行操作 return new String(cipher.doFinal(Base64.getDecoder().decode(data.getBytes(CHARSET))), CHARSET);
return cipher.doFinal(data); } catch (Exception e) {
e.printStackTrace();
return data;
}
} }
/** /**
* 生成密钥 <br> * DES加密文件
* Java 6 只支持56bit密钥 <br>
* Bouncy Castle 支持64bit密钥 <br>
* *
* @return byte[] 二进制密钥 * @param srcFile 待加密的文件
* @throws Exception * @param destFile 加密后存放的文件路径
* @return 加密后的文件路径
*/ */
public static byte[] initKey() throws Exception { /* public static String encryptFile(String password, String srcFile, String destFile) {
/* if (password== null || password.length() < 8) {
* 实例化密钥生成器 throw new RuntimeException("加密失败,key不能小于8位");
* }
* 若要使用64bit密钥注意替换 将下述代码中的KeyGenerator.getInstance(CIPHER_ALGORITHM); try {
* 替换为KeyGenerator.getInstance(CIPHER_ALGORITHM, "BC"); IvParameterSpec iv = new IvParameterSpec(IV_PARAMETER.getBytes(CHARSET));
*/ Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
KeyGenerator kg = KeyGenerator.getInstance(KEY_ALGORITHM); cipher.init(Cipher.ENCRYPT_MODE, generateKey(key), iv);
InputStream is = new FileInputStream(srcFile);
/* OutputStream out = new FileOutputStream(destFile);
* 初始化密钥生成器 若要使用64bit密钥注意替换 将下述代码kg.init(56); 替换为kg.init(64); CipherInputStream cis = new CipherInputStream(is, cipher);
*/ byte[] buffer = new byte[1024];
kg.init(56, new SecureRandom()); int r;
while ((r = cis.read(buffer)) > 0) {
out.write(buffer, 0, r);
}
cis.close();
is.close();
out.close();
return destFile;
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}*/
// 生成秘密密钥 /**
SecretKey secretKey = kg.generateKey(); * DES解密文件
*
// 获得密钥的二进制编码形式 * @param srcFile 已加密的文件
return secretKey.getEncoded(); * @param destFile 解密后存放的文件路径
} * @return 解密后的文件路径
*/
public static byte[] initKey(String seed) throws Exception { /* public static String decryptFile(String password, String srcFile, String destFile) {
KeyGenerator kg = KeyGenerator.getInstance(KEY_ALGORITHM); if (password== null || password.length() < 8) {
SecureRandom secureRandom = new SecureRandom(new Base64().decode(seed)); throw new RuntimeException("加密失败,key不能小于8位");
kg.init(secureRandom); }
SecretKey secretKey = kg.generateKey(); try {
return secretKey.getEncoded(); File file = new File(destFile);
} if (!file.exists()) {
file.getParentFile().mkdirs();
file.createNewFile();
}
IvParameterSpec iv = new IvParameterSpec(IV_PARAMETER.getBytes(CHARSET));
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, generateKey(key), iv);
InputStream is = new FileInputStream(srcFile);
OutputStream out = new FileOutputStream(destFile);
CipherOutputStream cos = new CipherOutputStream(out, cipher);
byte[] buffer = new byte[1024];
int r;
while ((r = is.read(buffer)) >= 0) {
cos.write(buffer, 0, r);
}
cos.close();
is.close();
out.close();
return destFile;
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}*/
} }

@ -7,6 +7,7 @@ import com.hai.common.utils.HttpsUtils;
import com.hai.common.utils.MD5Util; import com.hai.common.utils.MD5Util;
import org.apache.commons.collections4.MapUtils; import org.apache.commons.collections4.MapUtils;
import java.nio.charset.Charset;
import java.util.Base64; import java.util.Base64;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
@ -33,12 +34,15 @@ public class HuiLianTongUnionCardConfig {
dataJson.put("userMobile", "17726395120"); dataJson.put("userMobile", "17726395120");
System.out.println(JSONObject.toJSONString(dataJson)); System.out.println(JSONObject.toJSONString(dataJson));
map.put("data", new String(DESUtil.encrypt(JSONObject.toJSONString(dataJson).getBytes(),signCode.getBytes()),"ISO8859-1")); map.put("data", DESUtil.encrypt(signCode,JSONObject.toJSONString(dataJson)));
System.out.println(MapUtils.getString(map,"data")); System.out.println(MapUtils.getString(map,"data"));
String str = (MapUtils.getString(map,"accessCode") + signCode) + (MapUtils.getString(map,"requestId") + signCode) + (MapUtils.getString(map,"method") + signCode) + (MapUtils.getString(map,"data") + signCode); String str = (MapUtils.getString(map,"accessCode") + signCode) + (MapUtils.getString(map,"requestId") + signCode) + (MapUtils.getString(map,"method") + signCode) + (MapUtils.getString(map,"data") + signCode);
map.put("sign", MD5Util.encode(str.getBytes())); System.out.println(str);
// return HttpsUtils.doPost("http://hltgz.com:4010/api/v2/execute.json", JSON.toJSONString(map)); map.put("sign", com.hai.common.pay.util.MD5Util.MD5Encode(str, "UTF-8").toUpperCase());
System.out.println(MapUtils.getString(map, "sign"));
//return HttpsUtils.doPost("http://hltgz.com:4010/api/v2/execute.json", JSON.toJSONString(map));
return null; return null;
} }

Loading…
Cancel
Save