From 86d368337175a7d7eed5e9330bd80a838ab4f396 Mon Sep 17 00:00:00 2001
From: jiazx0107@163.com <jiazx0107@163.com>
Date: 星期四, 09 十一月 2023 17:25:23 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/igds-api-gateway' into igds-api-gateway
---
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