'提交代碼'

dev-discount
胡锐 3 years ago
parent ad525e82b3
commit c634bd69c1
  1. 1
      hai-bweb/src/main/java/com/bweb/controller/HighCouponController.java
  2. 229
      hai-service/src/main/java/com/hai/common/security/DESUtil.java
  3. 8
      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安全编码组件 * 偏移变量固定占8位字节
*
* @author wbw
* @version 1.0
*/ */
public abstract class DESUtil { private final static String IV_PARAMETER = "12345678";
static{
Security.insertProviderAt(new BouncyCastleProvider(), 1);
}
/** /**
* 密钥算法 <br> * 密钥算法
* Java 6 只支持56bit密钥 <br>
* Bouncy Castle 支持64bit密钥
*/ */
public static final String KEY_ALGORITHM = "DES"; private static final String ALGORITHM = "DES";
/**
* 加密/解密算法-工作模式-填充模式
*/
private static final String CIPHER_ALGORITHM = "DES/CBC/PKCS5Padding";
/** /**
* 加密/解密算法 / 工作模式 / 填充方式 * 默认编码
*/ */
public static final String CIPHER_ALGORITHM = "DES/ECB/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;
try {
Key secretKey = generateKey(password);
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM); Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
IvParameterSpec iv = new IvParameterSpec(IV_PARAMETER.getBytes(CHARSET));
cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);
byte[] bytes = cipher.doFinal(data.getBytes(CHARSET));
// 初始化,设置为解密模式 //JDK1.8及以上可直接使用Base64,JDK1.7及以下可以使用BASE64Encoder
cipher.init(Cipher.DECRYPT_MODE, k); //Android平台可以使用android.util.Base64
return new String(Base64.getEncoder().encode(bytes));
// 执行操作 } catch (Exception e) {
return cipher.doFinal(data); 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;
try {
Key secretKey = generateKey(password);
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM); Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
IvParameterSpec iv = new IvParameterSpec(IV_PARAMETER.getBytes(CHARSET));
// 初始化,设置为加密模式 cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);
cipher.init(Cipher.ENCRYPT_MODE, k); return new String(cipher.doFinal(Base64.getDecoder().decode(data.getBytes(CHARSET))), CHARSET);
} catch (Exception e) {
// 执行操作 e.printStackTrace();
return cipher.doFinal(data); 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);
CipherInputStream cis = new CipherInputStream(is, cipher);
byte[] buffer = new byte[1024];
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;
}*/
/* /**
* 初始化密钥生成器 若要使用64bit密钥注意替换 将下述代码kg.init(56); 替换为kg.init(64); * DES解密文件
*
* @param srcFile 已加密的文件
* @param destFile 解密后存放的文件路径
* @return 解密后的文件路径
*/ */
kg.init(56, new SecureRandom()); /* public static String decryptFile(String password, String srcFile, String destFile) {
if (password== null || password.length() < 8) {
// 生成秘密密钥 throw new RuntimeException("加密失败,key不能小于8位");
SecretKey secretKey = kg.generateKey();
// 获得密钥的二进制编码形式
return secretKey.getEncoded();
} }
try {
public static byte[] initKey(String seed) throws Exception { File file = new File(destFile);
KeyGenerator kg = KeyGenerator.getInstance(KEY_ALGORITHM); if (!file.exists()) {
SecureRandom secureRandom = new SecureRandom(new Base64().decode(seed)); file.getParentFile().mkdirs();
kg.init(secureRandom); file.createNewFile();
SecretKey secretKey = kg.generateKey(); }
return secretKey.getEncoded(); 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,11 +34,14 @@ 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);
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 HttpsUtils.doPost("http://hltgz.com:4010/api/v2/execute.json", JSON.toJSONString(map));
return null; return null;
} }

Loading…
Cancel
Save