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/api/utils/RSAUtils.java |   37 ++++++++++++++++++++++++++-----------
 1 files changed, 26 insertions(+), 11 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;
     }
 
     /**

--
Gitblit v1.9.3