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