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