From 65b9b81171843545bc17a8e7167ff06c3d80e73d Mon Sep 17 00:00:00 2001
From: CZT <czt18638530771@163.com>
Date: 星期一, 18 九月 2023 16:00:54 +0800
Subject: [PATCH] 调整上海接口加密问题

---
 src/main/java/com/fzzy/order/OrderManager.java                    |    2 
 src/main/java/com/fzzy/api/utils/RSAUtils.java                    |   37 ++++++++---
 src/main/java/com/fzzy/order/data/OrderData.java                  |    2 
 src/main/java/com/fzzy/push/sh2023/SH2023HttpClientUtil.java      |    7 +-
 src/main/java/com/fzzy/push/sh2023/dto/SH2023Api1101.java         |   45 +-------------
 src/main/java/com/fzzy/push/sh2023/SH2023OrderApiServiceImpl.java |   56 ++++++++++++++++++
 src/main/java/com/fzzy/push/whhpjl/WhjlOrderApiServiceImpl.java   |    2 
 src/main/java/com/fzzy/push/sh2023/SH2023ApiRemoteService.java    |   20 ++++--
 8 files changed, 106 insertions(+), 65 deletions(-)

diff --git a/src/main/java/com/fzzy/api/utils/RSAUtils.java b/src/main/java/com/fzzy/api/utils/RSAUtils.java
index 61d4e85..d94a600 100644
--- a/src/main/java/com/fzzy/api/utils/RSAUtils.java
+++ b/src/main/java/com/fzzy/api/utils/RSAUtils.java
@@ -12,6 +12,7 @@
 import java.security.interfaces.RSAPublicKey;
 import java.security.spec.PKCS8EncodedKeySpec;
 import java.security.spec.X509EncodedKeySpec;
+import java.util.Arrays;
 import java.util.Base64;
 import java.util.HashMap;
 import java.util.Map;
@@ -26,7 +27,7 @@
 
     private static final String CHARSET = "utf-8";
 
-    private static final int KEYSIZE = 2048;// 瀵嗛挜浣嶆暟
+    private static final int KEYSIZE = 1024;// 瀵嗛挜浣嶆暟
     private static final int RESERVE_BYTES = 11;
     private static final String ECB_PADDING = "RSA/ECB/PKCS1Padding";
 
@@ -41,6 +42,7 @@
 
         String privateKeyStr = getPrivateKeyStr(map);
         log.info("-----绉侀挜={}", privateKeyStr);
+        System.out.println(privateKeyStr.length());
 
         String publicKeyStr = getPublicKeyStr(map);
         log.info("-----鍏挜={}", publicKeyStr);
@@ -123,24 +125,37 @@
      * @return 鍔犲瘑鍚庣殑瀵嗘枃
      */
     public static String encrypt(String text, String publicKeyStr) {
+        String result = "";
         try {
             log.info("鏄庢枃瀛楃涓蹭负:[{}]", text);
+            // 鍔犲瘑
             Cipher cipher = Cipher.getInstance(KEY_ALGORITHM);
             cipher.init(Cipher.ENCRYPT_MODE, getPublicKey(publicKeyStr));
-
-            // URLEncoder缂栫爜瑙e喅涓枃涔辩爜闂
-            byte[] data = text.getBytes(StandardCharsets.UTF_8);
-            // 鍔犲瘑鏃惰秴杩�117瀛楄妭灏辨姤閿欍�備负姝ら噰鐢ㄥ垎娈靛姞瀵嗙殑鍔炴硶鏉ュ姞瀵�
-            byte[] enBytes = null;
-            for (int i = 0; i < data.length; i += MAX_ENCRYPT_BLOCK) {
-                // 娉ㄦ剰瑕佷娇鐢�2鐨勫�嶆暟锛屽惁鍒欎細鍑虹幇鍔犲瘑鍚庣殑鍐呭鍐嶈В瀵嗘椂涓轰贡鐮�
-                byte[] doFinal = cipher.doFinal(ArrayUtils.subarray(data, i, i + MAX_ENCRYPT_BLOCK));
-                enBytes = ArrayUtils.addAll(enBytes, doFinal);
+            byte[] textArray = text.getBytes();
+            int textLength = textArray.length;
+            log.info("鍔犲瘑瀛楄妭鏁�={}", textLength);
+            // 鏈�澶у姞瀵嗗瓧鑺傛暟锛岃秴鍑烘渶澶у瓧鑺傛暟闇�瑕佸垎缁勫姞瀵�
+            int MAX_ENCRYPT_BLOCK = 117;
+            // 鏍囪瘑
+            int offSet = 0;
+            byte[] resultBytes = {};
+            byte[] cache = {};
+            while (textLength - offSet > 0) {
+                if (textLength - offSet > MAX_ENCRYPT_BLOCK) {
+                    cache = cipher.doFinal(textArray, offSet, MAX_ENCRYPT_BLOCK);
+                    offSet += MAX_ENCRYPT_BLOCK;
+                } else {
+                    cache = cipher.doFinal(textArray, offSet, textLength - offSet);
+                    offSet = textLength;
+                }
+                resultBytes = Arrays.copyOf(resultBytes, resultBytes.length + cache.length);
+                System.arraycopy(cache, 0, resultBytes, resultBytes.length - cache.length, cache.length);
             }
-            return Base64.getEncoder().encodeToString(enBytes);
+            result = Base64.getEncoder().encodeToString(resultBytes);
         } catch (Exception e) {
             throw new RuntimeException("鍔犲瘑瀛楃涓瞇" + text + "]鏃堕亣鍒板紓甯�", e);
         }
+        return result;
     }
 
     /**
diff --git a/src/main/java/com/fzzy/order/OrderManager.java b/src/main/java/com/fzzy/order/OrderManager.java
index 2a05cf3..1e961bd 100644
--- a/src/main/java/com/fzzy/order/OrderManager.java
+++ b/src/main/java/com/fzzy/order/OrderManager.java
@@ -56,7 +56,7 @@
                 return;
             }
             OrderData data = JSONObject.parseObject(req.getData().toString(), OrderData.class);
-
+            data.setOrderid(req.getOrderid());
             //鏍规嵁閰嶇疆淇℃伅鎵ц
             OrderApiService service;
             for (ApiConfs conf : apiConfList) {
diff --git a/src/main/java/com/fzzy/order/data/OrderData.java b/src/main/java/com/fzzy/order/data/OrderData.java
index aca6fdb..1d556e3 100644
--- a/src/main/java/com/fzzy/order/data/OrderData.java
+++ b/src/main/java/com/fzzy/order/data/OrderData.java
@@ -30,4 +30,6 @@
      * 澶囨敞淇℃伅
      */
     private String remark;
+
+    private String orderid;
 }
diff --git a/src/main/java/com/fzzy/push/sh2023/SH2023ApiRemoteService.java b/src/main/java/com/fzzy/push/sh2023/SH2023ApiRemoteService.java
index 8d3b4e7..e1abe87 100644
--- a/src/main/java/com/fzzy/push/sh2023/SH2023ApiRemoteService.java
+++ b/src/main/java/com/fzzy/push/sh2023/SH2023ApiRemoteService.java
@@ -11,6 +11,7 @@
 import com.fzzy.api.service.ApiTriggerService;
 import com.fzzy.api.utils.*;
 import com.fzzy.api.view.repository.*;
+import com.fzzy.order.data.OrderData;
 import com.fzzy.push.sh2023.dto.*;
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
@@ -108,8 +109,8 @@
 
             //鑾峰彇鎸囦护id
             String key = RedisConst.buildKey(RedisConst.KYE_ORDER, conf.getKqdm());
-            String orderId = (String)redisUtil.get(key);
-            if(StringUtils.isEmpty(orderId)){
+            OrderData orderData = (OrderData)redisUtil.get(key);
+            if(StringUtils.isEmpty(orderData.getOrderid())){
                 log.error("鎸囦护id澶辨晥=" + jsonData);
                 ResponseDto responseDto = new ResponseDto(99, "鎸囦护id澶辨晥");
                 apiLog.setStatus(99);
@@ -124,18 +125,21 @@
             //鑾峰彇韬唤ID锛屽嵆琛屾斂鍖哄垝鐮�
             reqData.setUid(conf.getUserName());
             //鎸囦护id
-            reqData.setOrderid(orderId);
+            reqData.setOrderid(orderData.getOrderid());
+
             //韬唤绛惧悕锛屼娇鐢ㄨ嚜鏈塕SA绉侀挜杩涜鍔犲瘑(鍦板尯琛屾斂鍖哄垝浠g爜_褰撳ぉ鏃ユ湡)
             reqData.setAccess_token(RSAUtils.encryptData(reqData.getUid() + "_" + DateFormatUtils.format(new Date(), "yyyy-MM-dd"), conf.getPassword()));
             //鏁版嵁鎬绘潯鏁�
             List<Object> list = (List<Object>) data;
             reqData.setDatalength(list.size());
+
             //浣跨敤鍖虹骇骞冲彴鍏挜瀵规暟鎹繘琛孯SA鍔犲瘑
             reqData.setData(RSAUtils.encrypt(jsonData, conf.getPublicKey()));
             //鎽樿锛屾暟鎹富浣撶殑MD5鍊�
             reqData.setDigst(MyMD5Util.encrypt(jsonData));
 
-            SH2023RespDto responseDto = SH2023HttpClientUtil.postPushData(conf.getApiUrl() + inteId, reqData, conf);
+            SH2023RespDto responseDto = SH2023HttpClientUtil.postPushData(conf.getApiUrl() + inteId, JSON.toJSONString(reqData), conf);
+
             apiLog.setStatus(responseDto.getCode() == 200 ? 0 : responseDto.getCode());
             apiLog.setResult(responseDto.getResult());
             apiLogRep.save(apiLog);
@@ -196,8 +200,8 @@
 
             //鑾峰彇鎸囦护id
             String key = RedisConst.buildKey(RedisConst.KYE_ORDER, conf.getKqdm());
-            String orderId = (String)redisUtil.get(key);
-            if(StringUtils.isEmpty(orderId)){
+            OrderData orderData = (OrderData)redisUtil.get(key);
+            if(StringUtils.isEmpty(orderData.getOrderid())){
                 ResponseDto responseDto = new ResponseDto(99, "鎸囦护id澶辨晥");
                 apiLog.setStatus(99);
                 apiLog.setResult("鎸囦护id澶辨晥");
@@ -211,7 +215,7 @@
             //鑾峰彇韬唤ID锛屽嵆琛屾斂鍖哄垝鐮�
             reqData.setUid(conf.getUserName());
             //鎸囦护id
-            reqData.setOrderid(orderId);
+            reqData.setOrderid(orderData.getOrderid());
             //韬唤绛惧悕锛屼娇鐢ㄨ嚜鏈塕SA绉侀挜杩涜鍔犲瘑(鍦板尯琛屾斂鍖哄垝浠g爜_褰撳ぉ鏃ユ湡)
             reqData.setAccess_token(RSAUtils.encryptData(reqData.getUid() + "_" + DateFormatUtils.format(new Date(), "yyyy-MM-dd"), conf.getPassword()));
             //鏁版嵁鎬绘潯鏁�
@@ -222,7 +226,7 @@
             //鎽樿锛屾暟鎹富浣撶殑MD5鍊�
             reqData.setDigst(MyMD5Util.encrypt(jsonData));
 
-            SH2023RespDto responseDto = SH2023HttpClientUtil.postPushData(conf.getApiUrl() + inteId, reqData, conf);
+            SH2023RespDto responseDto = SH2023HttpClientUtil.postPushData(conf.getApiUrl() + inteId, JSON.toJSONString(reqData), conf);
             apiLog.setStatus(responseDto.getCode() == 200 ? 0 : responseDto.getCode());
             apiLog.setResult(responseDto.getResult());
             apiLogRep.save(apiLog);
diff --git a/src/main/java/com/fzzy/push/sh2023/SH2023HttpClientUtil.java b/src/main/java/com/fzzy/push/sh2023/SH2023HttpClientUtil.java
index 0d47166..9f5ddf9 100644
--- a/src/main/java/com/fzzy/push/sh2023/SH2023HttpClientUtil.java
+++ b/src/main/java/com/fzzy/push/sh2023/SH2023HttpClientUtil.java
@@ -26,8 +26,8 @@
      * @throws Exception
      */
     @SuppressWarnings("resource")
-    public static SH2023RespDto postPushData(String url, SH2023ReqDto reqData , ApiConfs apiConfs) throws Exception {
-        log.info("---------鎺ュ彛璇锋眰鍦板潃锛�" +url+ "----------鍙傛暟锛�" + reqData.toString() +"---------");
+    public static SH2023RespDto postPushData(String url, String reqData , ApiConfs apiConfs) throws Exception {
+        log.info("---------鎺ュ彛璇锋眰鍦板潃锛�" +url+ "----------鍙傛暟锛�" + reqData +"---------");
         BufferedReader in = null;
         URL urls = new URL(url);
         HttpURLConnection connection = null;
@@ -48,7 +48,8 @@
             connection.setRequestMethod("POST");
 
             outputStream = connection.getOutputStream();
-            outputStream.write(reqData.toString().getBytes("UTF-8"));
+
+            outputStream.write(reqData.getBytes("UTF-8"));
             try {
                 connection.connect();
                 if (connection.getResponseCode() == 200) {
diff --git a/src/main/java/com/fzzy/push/sh2023/SH2023OrderApiServiceImpl.java b/src/main/java/com/fzzy/push/sh2023/SH2023OrderApiServiceImpl.java
index 30b5a8e..8ada21d 100644
--- a/src/main/java/com/fzzy/push/sh2023/SH2023OrderApiServiceImpl.java
+++ b/src/main/java/com/fzzy/push/sh2023/SH2023OrderApiServiceImpl.java
@@ -13,6 +13,8 @@
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.time.DateUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
 import java.text.ParseException;
 
 /**
@@ -22,6 +24,7 @@
  * @date 2023/08/17
  */
 @Slf4j
+@Service
 public class SH2023OrderApiServiceImpl implements OrderApiService {
 
     @Autowired
@@ -59,7 +62,7 @@
 
         //鎸囦护瀛樺叆缂撳瓨锛屾椂鏁�24灏忔椂
         String key = RedisConst.buildKey(RedisConst.KYE_ORDER, conf.getKqdm());
-        redisUtil.set(key, orderid, 59 * 60 * 24);
+        redisUtil.set(key, req, 59 * 60 * 24);
 
         ApiParam param = new ApiParam();
         param.setPushProtocol(conf.getPushProtocol());
@@ -71,7 +74,7 @@
         log.info("鎺ユ敹鐨勬寚浠や腑鎺ュ彛鍐呭涓�={}", req.getContent());
         String[] interfaces = ids.split(";");
         for (String inteId : interfaces) {
-            log.info("杩樻槸鎵ц鎺ュ彛={}鐨勬暟鎹笂鎶�", inteId);
+            log.info("鎵ц鎺ュ彛={}鐨勬暟鎹笂鎶�", inteId);
             param.setInteId(inteId);
             getDataToPush(param, inteId);
         }
@@ -85,102 +88,151 @@
         switch (inteId) {
             case "1101":
                 sh2023PushService11.pushData1101(apiRemoteService, param);
+                break;
             case "1102":
                 sh2023PushService11.pushData1102(apiRemoteService, param);
+                break;
             case "1103":
                 sh2023PushService11.pushData1103(apiRemoteService, param);
+                break;
             case "1104":
                 sh2023PushService11.pushData1104(apiRemoteService, param);
+                break;
             case "1105":
                 sh2023PushService11.pushData1105(apiRemoteService, param);
+                break;
             case "1106":
                 sh2023PushService11.pushData1106(apiRemoteService, param);
+                break;
             case "1107":
                 sh2023PushService11.pushData1107(apiRemoteService, param);
+                break;
             case "1108":
                 sh2023PushService11.pushData1108(apiRemoteService, param);
+                break;
             case "1109":
                 sh2023PushService11.pushData1109(apiRemoteService, param);
+                break;
             case "1110":
                 sh2023PushService11.pushData1110(apiRemoteService, param);
+                break;
             case "1111":
                 sh2023PushService11.pushData1111(apiRemoteService, param);
+                break;
             case "1112":
                 sh2023PushService11.pushData1112(apiRemoteService, param);
+                break;
             case "1113":
                 sh2023PushService11.pushData1113(apiRemoteService, param);
+                break;
             case "1114":
                 sh2023PushService11.pushData1114(apiRemoteService, param);
+                break;
             case "1201":
                 sh2023PushService12.pushData1201(apiRemoteService, param);
+                break;
             case "1202":
                 sh2023PushService12.pushData1202(apiRemoteService, param);
+                break;
             case "1203":
                 sh2023PushService12.pushData1203(apiRemoteService, param);
+                break;
             case "1204":
                 sh2023PushService12.pushData1204(apiRemoteService, param);
+                break;
             case "1205":
                 sh2023PushService12.pushData1205(apiRemoteService, param);
+                break;
             case "1206":
                 sh2023PushService12.pushData1206(apiRemoteService, param);
+                break;
             case "1207":
                 sh2023PushService12.pushData1207(apiRemoteService, param);
+                break;
             case "1208":
                 sh2023PushService12.pushData1209(apiRemoteService, param);
+                break;
             case "1209":
                 sh2023PushService12.pushData1209(apiRemoteService, param);
+                break;
             case "1210":
                 sh2023PushService12.pushData1210(apiRemoteService, param);
+                break;
             case "1211":
                 sh2023PushService12.pushData1211(apiRemoteService, param);
+                break;
             case "1212":
                 sh2023PushService12.pushData1212(apiRemoteService, param);
+                break;
             case "2101":
                 sh2023PushService12.pushData2101(apiRemoteService, param);
+                break;
             case "2102":
                 sh2023PushService12.pushData2102(apiRemoteService, param);
+                break;
             case "2104":
                 sh2023PushService12.pushData2104(apiRemoteService, param);
+                break;
             case "1301":
                 sh2023PushService13.pushData1301(apiRemoteService, param);
+                break;
             case "1302":
                 sh2023PushService13.pushData1302(apiRemoteService, param);
+                break;
             case "1303":
                 sh2023PushService13.pushData1303(apiRemoteService, param);
+                break;
             case "1304":
                 sh2023PushService13.pushData1304(apiRemoteService, param);
+                break;
             case "1305":
                 sh2023PushService13.pushData1305(apiRemoteService, param);
+                break;
             case "1306":
                 sh2023PushService13.pushData1306(apiRemoteService, param);
+                break;
             case "1307":
                 sh2023PushService13.pushData1307(apiRemoteService, param);
+                break;
             case "1308":
                 sh2023PushService13.pushData1308(apiRemoteService, param);
+                break;
             case "1309":
                 sh2023PushService13.pushData1309(apiRemoteService, param);
+                break;
             case "1310":
                 sh2023PushService13.pushData1310(apiRemoteService, param);
+                break;
             case "1311":
                 sh2023PushService13.pushData1311(apiRemoteService, param);
+                break;
             case "2103":
                 sh2023PushService13.pushData2103(apiRemoteService, param);
+                break;
             case "1401":
                 sh2023PushService14.pushData1401(apiRemoteService, param);
+                break;
             case "1402":
                 sh2023PushService14.pushData1402(apiRemoteService, param);
+                break;
             case "1403":
                 sh2023PushService14.pushData1403(apiRemoteService, param);
+                break;
             case "1404":
                 sh2023PushService14.pushData1404(apiRemoteService, param);
+                break;
             case "1405":
                 sh2023PushService14.pushData1405(apiRemoteService, param);
+                break;
             case "2203":
                 sh2023PushService14.pushData2203(apiRemoteService, param);
+                break;
             case "2204":
                 sh2023PushService14.pushData2204(apiRemoteService, param);
+                break;
             default:
                 log.error("-----涓婃捣甯傚钩鍙帮細鏈尮閰嶅埌鎺ュ彛缂栫爜锛屼笉鎺ㄩ��-----");
+                break;
         }
 
     }
diff --git a/src/main/java/com/fzzy/push/sh2023/dto/SH2023Api1101.java b/src/main/java/com/fzzy/push/sh2023/dto/SH2023Api1101.java
index 5d797f3..42fcb22 100644
--- a/src/main/java/com/fzzy/push/sh2023/dto/SH2023Api1101.java
+++ b/src/main/java/com/fzzy/push/sh2023/dto/SH2023Api1101.java
@@ -3,22 +3,15 @@
 import com.alibaba.fastjson.annotation.JSONField;
 import com.bstek.dorado.annotation.PropertyDef;
 import com.fasterxml.jackson.annotation.JsonFormat;
-import com.fzzy.api.entity.ApiParent;
 import lombok.Data;
-import lombok.EqualsAndHashCode;
 import org.springframework.format.annotation.DateTimeFormat;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Table;
 import java.io.Serializable;
 import java.util.Date;
 
 /**
  * 鎺ュ彛琛�-鍗曚綅
  *
- * @author chen
+ * @author czt
  * @date 2022-09-02 14:18
  */
 @Data
@@ -96,6 +89,9 @@
     @PropertyDef(label = "浠撴埧鏁�")
     private Integer cfs;
 
+    @PropertyDef(label = "寤掗棿鏁�")
+    private Integer ajs;
+
     @PropertyDef(label = "娌圭綈鏁�")
     private Integer ygs;
 
@@ -105,26 +101,8 @@
     @PropertyDef(label = "绾害")
     private double wd;
 
-    @PropertyDef(label = "鍗曚綅鐘舵��")
-    private String dwzt;
-
-    @PropertyDef(label = "澶囨绫诲瀷", description = "0:鍒濇澶囨 1:鍙樻洿澶囨 2:閲嶆柊澶囨")
-    private String balx;
-
-    @PropertyDef(label = "浠撳偍涓氬姟绫诲瀷")
-    private String ccywlx;
-
-    @PropertyDef(label = "浠撳偍鍝佺")
-    private String ccpz;
-
-    @PropertyDef(label = "澶囨鐘舵��")
-    private String bazt;
-
     @PropertyDef(label = "鎿嶄綔鏍囧織")
     private String czbz;
-
-    @PropertyDef(label = "寤掗棿鏁�")
-    private Integer ajs;
 
     @PropertyDef(label = "鏍囪浣�")
     private String bjw;
@@ -133,17 +111,4 @@
     @JSONField(format = "yyyy-MM-dd HH:mm:ss")
     private Date zhgxsj;
 
-    @JSONField(serialize = false)
-    @PropertyDef(label = "涓氬姟id")
-    private String bizId;
-
-    @JSONField(serialize = false)
-    @PropertyDef(label = "鍚屾鏃堕棿", description = "浠庣伯搴撶郴缁熷悓姝ュ埌鎺ュ彛绠$悊涓績鐨勬椂闂�")
-    private Date syncTime;
-
-    @JSONField(serialize = false)
-    @PropertyDef(label = "搴撳尯浠g爜")
-    private String kqdm;
-
-
-}
+}
\ No newline at end of file
diff --git a/src/main/java/com/fzzy/push/whhpjl/WhjlOrderApiServiceImpl.java b/src/main/java/com/fzzy/push/whhpjl/WhjlOrderApiServiceImpl.java
index 2373922..286e6b4 100644
--- a/src/main/java/com/fzzy/push/whhpjl/WhjlOrderApiServiceImpl.java
+++ b/src/main/java/com/fzzy/push/whhpjl/WhjlOrderApiServiceImpl.java
@@ -4,6 +4,7 @@
 import com.fzzy.api.entity.ApiConfs;
 import com.fzzy.order.OrderApiService;
 import com.fzzy.order.data.OrderData;
+import org.springframework.stereotype.Service;
 
 /**
  * 涓婃姹夊啗绮钩鍙�2023鐗�-鎸囦护瑙f瀽
@@ -11,6 +12,7 @@
  * @author czt
  * @date 2023/08/17
  */
+@Service
 public class WhjlOrderApiServiceImpl implements OrderApiService {
 
     @Override

--
Gitblit v1.9.3