From f905cd8608914a9ce85bcbceb075d02a21c8b893 Mon Sep 17 00:00:00 2001 From: Cheney Wong Date: Wed, 2 Jul 2025 10:30:16 +0800 Subject: [PATCH] save --- config.properties | 4 +- pom.xml | 2 +- .../sge/database/SydApiLongLinkWrap.java | 72 ++++++++++++++++++- .../java/com/sunyard/sge/pool/CommWorker.java | 8 ++- 说明.txt | 14 ++++ 5 files changed, 94 insertions(+), 6 deletions(-) diff --git a/config.properties b/config.properties index d49936f..0710b84 100644 --- a/config.properties +++ b/config.properties @@ -3,5 +3,5 @@ debug=false # 地址列表 (格式: addX=ip:port) -add1=127.0.0.1:8889 -add2=172.1.41.129:8889 +addr1=172.1.41.129:8889 +addr2=172.1.41.129:8889 diff --git a/pom.xml b/pom.xml index 77ada82..d4e86c5 100644 --- a/pom.xml +++ b/pom.xml @@ -37,7 +37,7 @@ com.sunyard sydapi4j - 1.15.20250627 + 1.15.20250701 org.apache.logging.log4j diff --git a/src/main/java/com/sunyard/sge/database/SydApiLongLinkWrap.java b/src/main/java/com/sunyard/sge/database/SydApiLongLinkWrap.java index 22e6a40..10b5e65 100644 --- a/src/main/java/com/sunyard/sge/database/SydApiLongLinkWrap.java +++ b/src/main/java/com/sunyard/sge/database/SydApiLongLinkWrap.java @@ -155,8 +155,7 @@ public class SydApiLongLinkWrap implements SydApi { } } - @Override - public DataAndMac SYD_SM4_EncryptAndMac_ShortData(int iEncKeyIndex, int iMacKeyIndex, byte[] pcData) { + private DataAndMac SYD_SM4_AllInOne(int iEncKeyIndex, int iMacKeyIndex, byte[] pcData){ try { FutureTask taskEnc = builder.getLongLinkWorks().fTask(new Callable() { @Override @@ -181,6 +180,75 @@ public class SydApiLongLinkWrap implements SydApi { } } + @Override + public DataAndMac SYD_SM4_EncryptAndMac_ShortData(int iEncKeyIndex, int iMacKeyIndex, byte[] pcData) { + try { + + return SYD_SM4_AllInOne(iEncKeyIndex, iMacKeyIndex, pcData); + +// // 线程池忙, 使用单线程计算 +// if( builder.getLongLinkWorks().threadPoolIsBusy() ) { +// return SYD_SM4_AllInOne(iEncKeyIndex, iMacKeyIndex, pcData); +// } +// +// // 线程池不忙,使用并发计算 +// +// // 将pcData拆分为两半,第一半16字节对齐 +// int halfLength = pcData.length / 2; +// int alignedLength = (halfLength + 15) & ~15; // 向上取整到16的倍数 +// alignedLength = Math.min(alignedLength, pcData.length); // 不超过原始数据长度 +// if (alignedLength < 16) { +// throw new IllegalArgumentException("数据长度不足16字节,无法对齐"); +// } +// +// +// byte[] firstHalf = Arrays.copyOfRange(pcData, 0, alignedLength); +// byte[] secondHalf = Arrays.copyOfRange(pcData, alignedLength, pcData.length); +// +// +// FutureTask taskEnc1 = builder.getLongLinkWorks().fTask(new Callable() { +// @Override +// public byte[] call() throws Exception { +// return builder.get().SYD_SM4_LongData( iEncKeyIndex, firstHalf, 1, Consts.ECB_ENC); +// } +// }); +// FutureTask taskEnc2 = builder.getLongLinkWorks().fTask(new Callable() { +// @Override +// public byte[] call() throws Exception { +// return builder.get().SYD_SM4_LongData( iEncKeyIndex, secondHalf, 3, Consts.ECB_ENC); +// } +// }); +// +// byte[] enData1 = taskEnc1.get(); +// FutureTask> taskMac = builder.getLongLinkWorks().fTask(new Callable< LongDataReturn>() { +// @Override +// public LongDataReturn call() throws Exception { +// return builder.get().SYD_SM4Mac_LongData(iMacKeyIndex, enData1, 1, null); +// } +// }); +// +// byte[] enData2 = taskEnc2.get(); +// LongDataReturn macProc = taskMac.get(); +// FutureTask> taskMac2 = builder.getLongLinkWorks().fTask(new Callable>() { +// @Override +// public LongDataReturn call() throws Exception { +// return builder.get().SYD_SM4Mac_LongData(iMacKeyIndex, enData2, 3, macProc.getProcData()); +// } +// }); +// LongDataReturn mac = taskMac.get(); +// +// // 合并密文 +// byte[] enData = new byte[enData1.length + enData2.length]; +// System.arraycopy(enData1, 0, enData, 0, enData1.length); +// System.arraycopy(enData2, 0, enData, enData1.length, enData2.length); +// +// +// return new DataAndMac(enData, mac.getData()); + } catch (Exception e) { + throw new SydApiException("并行任务执行失败", 0xC101, e); + } + } + @Override public DataAndMacCheck SYD_SM4_CheckMacAndDecrypt_ShortData(int iEncKeyIndex, int iMacKeyIndex, byte[] pcData, String mac) { FutureTask task = builder.getLongLinkWorks().fTask(new Callable() { diff --git a/src/main/java/com/sunyard/sge/pool/CommWorker.java b/src/main/java/com/sunyard/sge/pool/CommWorker.java index 7e462c3..c1e14b7 100644 --- a/src/main/java/com/sunyard/sge/pool/CommWorker.java +++ b/src/main/java/com/sunyard/sge/pool/CommWorker.java @@ -10,7 +10,7 @@ public class CommWorker { // 连接池配置 private final PoolConfig poolConfig; // 真正的通信线程 - private final ExecutorService threadPool; + private final ThreadPoolExecutor threadPool; public CommWorker(){ this( new PoolConfig() ); @@ -26,6 +26,12 @@ public class CommWorker { ); } + public boolean threadPoolIsBusy() { + // 返回线程池 + return threadPool.getActiveCount() > (poolConfig.getMaxAliveNumber() / 2); + } + + /** * 执行一个异步任务 * @param callable diff --git a/说明.txt b/说明.txt index 7067de5..c96dca2 100644 --- a/说明.txt +++ b/说明.txt @@ -20,3 +20,17 @@ sydapi4j-1.0.20220906.jar - log4j-api-2.17.0.jar 日志接口 - log4j-core-2.17.0.jar 日志核心包 - sydapi4j-1.0.20220805.jar 加密机通信包 + + + +linux测试服务器 +电口:172.1.10.245 +光口:192.168.100.245 + +金交所(非信创-4.07版本): +电口:172.1.41.216 +光口:192.168.110.240 + +金交所(信创-11.01.01版本): +电口:172.1.41.129 +光口:192.168.100.45 \ No newline at end of file