From 5264f97b341d5efbeb1d9717152eb2c5653a4c98 Mon Sep 17 00:00:00 2001 From: "junj2.liang" Date: Mon, 8 Aug 2022 14:31:00 +0800 Subject: [PATCH 01/11] =?UTF-8?q?=E5=9B=9E=E6=BB=9A=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/sample/Sample.java | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/src/test/java/sample/Sample.java b/src/test/java/sample/Sample.java index 8f9a913..54d6993 100644 --- a/src/test/java/sample/Sample.java +++ b/src/test/java/sample/Sample.java @@ -373,13 +373,9 @@ public class Sample int keyIdx = 0; // 测试数据 byte[] data = new byte[16]; - byte[] data2 = {}; byte[] encData = api.SYD_SM4_ShortData( keyIdx , data, Consts.ECB_ENC ); byte[] orgData = api.SYD_SM4_ShortData( keyIdx , encData, Consts.ECB_DEC ); - //测试解密 pcData长度为0的情况 - byte[] pcData_0 = api.SYD_SM4_ShortData( keyIdx , data2, Consts.ECB_DEC ); System.out.println( "HEX=" + Util.bytes2HexString( encData ) ); - System.out.println( "HEX=" + Util.bytes2HexString( pcData_0 ) ); Assert.assertArrayEquals( orgData, data ); } @@ -391,24 +387,14 @@ public class Sample data.add( new byte[8] ); data.add( new byte[16] ); data.add( new byte[1024] ); - List data2 = new ArrayList<>(); - data2.add( new byte[0] ); - data2.add( new byte[0] ); - data2.add( new byte[0] ); List encData = api.SYD_SM4_BatchData( keyIdx , data, Consts.ECB_ENC ); List orgData = api.SYD_SM4_BatchData( keyIdx , encData, Consts.ECB_DEC ); - //测试解密 pcData长度为0的情况 - List pcData_0 = api.SYD_SM4_BatchData( keyIdx ,data2 , Consts.ECB_DEC ); - for ( int i = 0 ; i < data.size() ; i++ ) { System.out.println( "HEX=" + Util.bytes2HexString( encData.get( i ) ) ); Assert.assertArrayEquals( orgData.get( i ), data.get( i ) ); } - for ( int i = 0 ; i < data2.size() ; i++ ) { - System.out.println( "HEX=" + Util.bytes2HexString( encData.get( i ) ) ); - Assert.assertArrayEquals( pcData_0.get( i ), data.get( i ) ); - } + } } From 30087e7d5377ed6eb7fbceb3afa506491967447f Mon Sep 17 00:00:00 2001 From: "junj2.liang" Date: Mon, 8 Aug 2022 15:11:01 +0800 Subject: [PATCH 02/11] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/test/LengthTest.java | 116 +++++++++++++++++++++++++++++ src/test/java/test/LogTest.java | 12 +-- 2 files changed, 120 insertions(+), 8 deletions(-) create mode 100644 src/test/java/test/LengthTest.java diff --git a/src/test/java/test/LengthTest.java b/src/test/java/test/LengthTest.java new file mode 100644 index 0000000..394bcba --- /dev/null +++ b/src/test/java/test/LengthTest.java @@ -0,0 +1,116 @@ +package test; + +import com.sunyard.proto.Util; +import com.sunyard.sge.database.*; +import com.sunyard.sge.database.Consts; +import com.sunyard.sge.log.LogFactory; +import org.apache.logging.log4j.Logger; +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import java.nio.ByteBuffer; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class LengthTest +{ + private SydApi api; + @Before + public void init(){ + SydApiBuilder builder = new SydApiBuilder( + new String[]{ "192.168.0.200" }, + new int[]{ 8889 }, + 10, + 15 + + ); + api = builder.build(); + } + // + @Test + public void syd_SM4_ShortDataTest(){ + //解密 pcData长度为0 + byte[] bytes = api.SYD_SM4_ShortData(0, new byte[0], Consts.ECB_DEC); + Arrays.toString(bytes); + //解密 pcData长度不为0 + byte[] bytes2 = api.SYD_SM4_ShortData(0, new byte[0], Consts.ECB_DEC); + Arrays.toString(bytes2); + + } + @Test + public void syd_SM4_BatchDataTest(){ + // 密钥索引 + int[] keyIdx = new int[]{ 0, 1, 2 }; + // 测试数据 + List data = new ArrayList<>(); + data.add( new byte[0] ); + data.add( new byte[0] ); + data.add( new byte[0] ); + List data2 = new ArrayList<>(); + data.add( new byte[0] ); + data.add( new byte[0] ); + data.add( new byte[0] ); + //解密 pcData长度为0 + List orgDatas = api.SYD_SM4_BatchData( keyIdx , data, Consts.ECB_DEC ); + for (byte[] byte_1 :orgDatas) { + System.out.printf("解密后数据", Arrays.toString(byte_1)); + } + //解密 pcData长度不为0 + List orgDatas2 = api.SYD_SM4_BatchData( keyIdx , data2, Consts.ECB_DEC ); + for (byte[] byte_2 :orgDatas2) { + System.out.printf("解密后数据", Arrays.toString(byte_2)); + } + } + @Test + public void syd_SM4_LongDataTest(){ + // 密钥索引 + int keyIdx = 0; + // 测试数据 + byte[] data = new byte[16 * 3 + 8]; + // 每包大小 + int pack = 16; + //解密 pcData长度为0 + byte[] recv = api.SYD_SM4_LongData( keyIdx , new byte[0], Consts.PkgNumHead, Consts.ECB_DEC); + System.out.println(Arrays.toString(recv)); + //解密 pcData长度不为0 + // 密文数据 + ByteBuffer enDataBuff = ByteBuffer.allocate( data.length + 16 ); + // 分包加密 + { + int n = data.length / pack; + int remainder = data.length % pack; + if ( remainder > 0 ) { + n += 1; + } else { + remainder = pack; + } + + for ( int i = 0 ; i < n ; i ++ ) { + byte[] buff = new byte[ pack ]; + + // 首包 + if ( 0 == i ) { + System.arraycopy( data, i * pack, buff, 0, pack ); + byte[] recv3 = api.SYD_SM4_LongData( keyIdx , buff, Consts.PkgNumHead, Consts.ECB_ENC); + enDataBuff.put( recv3 ); + continue; + } + // 尾包 + if ( i == (n-1) ){ + buff = new byte[ remainder ]; + System.arraycopy( data, i * pack, buff, 0, remainder ); + byte[] recv3 = api.SYD_SM4_LongData( keyIdx , buff, Consts.PkgNumTail, Consts.ECB_ENC); + enDataBuff.put( recv3); + continue; + } + // 中间包 + System.arraycopy( data, i * pack, buff, 0, pack ); + byte[] recv3 = api.SYD_SM4_LongData( keyIdx , buff, Consts.PkgNumMiddle, Consts.ECB_ENC); + enDataBuff.put( recv3 ); + } + } +} +} diff --git a/src/test/java/test/LogTest.java b/src/test/java/test/LogTest.java index 795f41c..abf54e4 100644 --- a/src/test/java/test/LogTest.java +++ b/src/test/java/test/LogTest.java @@ -10,13 +10,9 @@ import java.util.Arrays; public class LogTest { public static void main(String[] args) { - SydApi.SYD_SetLogConfig("./test-log/",11); -// int[] a1 = {1,2,3}; -// Logger log = LogFactory.createLogger("./test-log/", 9); -// log.error("error"); -// log.info(Arrays.toString(a1)); -// log.debug("debug"); -// System.out.println("发送数据"); - + Logger log = LogFactory.createLogger("./test-log/", 3); + log.error("error"); + log.info("info"); + log.debug("debug"); } } From 28c21ef734756b19b873255ff2abf3b02379f7e1 Mon Sep 17 00:00:00 2001 From: "junj2.liang" Date: Mon, 8 Aug 2022 15:35:41 +0800 Subject: [PATCH 03/11] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/test/LengthTest.java | 68 ++++++++++++++++++++++++++---- 1 file changed, 59 insertions(+), 9 deletions(-) diff --git a/src/test/java/test/LengthTest.java b/src/test/java/test/LengthTest.java index 394bcba..db0cc6f 100644 --- a/src/test/java/test/LengthTest.java +++ b/src/test/java/test/LengthTest.java @@ -36,30 +36,30 @@ public class LengthTest byte[] bytes = api.SYD_SM4_ShortData(0, new byte[0], Consts.ECB_DEC); Arrays.toString(bytes); //解密 pcData长度不为0 - byte[] bytes2 = api.SYD_SM4_ShortData(0, new byte[0], Consts.ECB_DEC); + byte[] bytes2 = api.SYD_SM4_ShortData(0, new byte[16], Consts.ECB_DEC); Arrays.toString(bytes2); - } @Test public void syd_SM4_BatchDataTest(){ - // 密钥索引 int[] keyIdx = new int[]{ 0, 1, 2 }; // 测试数据 + List data2 = new ArrayList<>(); + data2.add( new byte[8] ); + data2.add( new byte[16] ); + data2.add( new byte[1024] ); List data = new ArrayList<>(); data.add( new byte[0] ); data.add( new byte[0] ); data.add( new byte[0] ); - List data2 = new ArrayList<>(); - data.add( new byte[0] ); - data.add( new byte[0] ); - data.add( new byte[0] ); - //解密 pcData长度为0 + +// 解密 pcData长度为0 List orgDatas = api.SYD_SM4_BatchData( keyIdx , data, Consts.ECB_DEC ); for (byte[] byte_1 :orgDatas) { System.out.printf("解密后数据", Arrays.toString(byte_1)); } //解密 pcData长度不为0 - List orgDatas2 = api.SYD_SM4_BatchData( keyIdx , data2, Consts.ECB_DEC ); + List encData = api.SYD_SM4_BatchData( keyIdx , data2, Consts.ECB_ENC ); + List orgDatas2 = api.SYD_SM4_BatchData( keyIdx , encData, Consts.ECB_DEC ); for (byte[] byte_2 :orgDatas2) { System.out.printf("解密后数据", Arrays.toString(byte_2)); } @@ -111,6 +111,56 @@ public class LengthTest byte[] recv3 = api.SYD_SM4_LongData( keyIdx , buff, Consts.PkgNumMiddle, Consts.ECB_ENC); enDataBuff.put( recv3 ); } + } + byte[] enData = new byte[ enDataBuff.position() ]; + System.arraycopy( enDataBuff.array(), 0, enData, 0, enData.length ); + System.out.println( "EnData HEX=" + Util.bytes2HexString( enData )); + + + // 分包解密 + // 密文数据 + ByteBuffer deDataBuff = ByteBuffer.allocate( data.length + 16 ); + { + int n = enData.length / pack; + int remainder = enData.length % pack; + if ( remainder > 0 ) { + n += 1; + } else { + remainder = pack; + } + + for ( int i = 0 ; i < n ; i ++ ) { + byte[] buff = new byte[ pack ]; + + // 首包 + if ( 0 == i ) { + System.arraycopy( enData, i * pack, buff, 0, pack ); + byte[] recv3 = api.SYD_SM4_LongData( keyIdx , buff, Consts.PkgNumHead, Consts.ECB_DEC); + deDataBuff.put( recv3 ); + continue; + } + + // 尾包 + if ( i == (n-1) ){ + buff = new byte[ remainder ]; + System.arraycopy( enData, i * pack, buff, 0, remainder ); + byte[] recv3 = api.SYD_SM4_LongData( keyIdx , buff, Consts.PkgNumTail, Consts.ECB_DEC); + deDataBuff.put( recv3 ); + continue; + } + + // 中间包 + System.arraycopy( enData, i * pack, buff, 0, pack ); + byte[] recv3 = api.SYD_SM4_LongData( keyIdx , buff, Consts.PkgNumMiddle, Consts.ECB_DEC); + deDataBuff.put( recv3 ); + } + } + byte[] deData = new byte[ deDataBuff.position() ]; + System.arraycopy( deDataBuff.array(), 0, deData, 0, deData.length ); + System.out.println( "DeData HEX=" + Util.bytes2HexString( deData )); + + // 断言解密后和原文相同 + Assert.assertArrayEquals( deData, data ); } } From adc8ec860504d6b5e9d33d457ac35ac70080f104 Mon Sep 17 00:00:00 2001 From: "junj2.liang" Date: Mon, 8 Aug 2022 15:52:34 +0800 Subject: [PATCH 04/11] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/sample/Sample.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/sample/Sample.java b/src/test/java/sample/Sample.java index 54d6993..6d57047 100644 --- a/src/test/java/sample/Sample.java +++ b/src/test/java/sample/Sample.java @@ -16,7 +16,7 @@ public class Sample public static void main(String[] args) { // 路径要以 / 或 \\ 结尾表示目录 - SydApi.SYD_SetLogConfig("./logs/",1); + SydApi.SYD_SetLogConfig("./logs/",3); Logger log = LogFactory.getLogger(); log.info("start"); From 17385b5decc74b870d22c85720ec465783cca2ad Mon Sep 17 00:00:00 2001 From: "junj2.liang" Date: Mon, 8 Aug 2022 16:35:12 +0800 Subject: [PATCH 05/11] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/test/LengthTest.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/test/java/test/LengthTest.java b/src/test/java/test/LengthTest.java index db0cc6f..e53c614 100644 --- a/src/test/java/test/LengthTest.java +++ b/src/test/java/test/LengthTest.java @@ -32,11 +32,14 @@ public class LengthTest // @Test public void syd_SM4_ShortDataTest(){ + int keyIdx = 0; + byte[] data = new byte[16]; //解密 pcData长度为0 byte[] bytes = api.SYD_SM4_ShortData(0, new byte[0], Consts.ECB_DEC); Arrays.toString(bytes); //解密 pcData长度不为0 - byte[] bytes2 = api.SYD_SM4_ShortData(0, new byte[16], Consts.ECB_DEC); + byte[] encData = api.SYD_SM4_ShortData( keyIdx , data, Consts.ECB_ENC ); + byte[] bytes2 = api.SYD_SM4_ShortData(keyIdx, encData, Consts.ECB_DEC); Arrays.toString(bytes2); } @Test @@ -61,7 +64,7 @@ public class LengthTest List encData = api.SYD_SM4_BatchData( keyIdx , data2, Consts.ECB_ENC ); List orgDatas2 = api.SYD_SM4_BatchData( keyIdx , encData, Consts.ECB_DEC ); for (byte[] byte_2 :orgDatas2) { - System.out.printf("解密后数据", Arrays.toString(byte_2)); + System.out.println(Arrays.toString(byte_2)); } } @Test From 6949bd4b21de251ffa40c3e5031fc204c70f1b7f Mon Sep 17 00:00:00 2001 From: "junj2.liang" Date: Mon, 8 Aug 2022 17:35:31 +0800 Subject: [PATCH 06/11] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=9F=AD=E9=93=BE?= =?UTF-8?q?=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/sunyard/sge/database/SydApi.java | 3 +- .../sunyard/sge/database/SydApi4Database.java | 33 ++++++++++++++----- 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/sunyard/sge/database/SydApi.java b/src/main/java/com/sunyard/sge/database/SydApi.java index 7233398..017f5c0 100644 --- a/src/main/java/com/sunyard/sge/database/SydApi.java +++ b/src/main/java/com/sunyard/sge/database/SydApi.java @@ -43,8 +43,7 @@ public interface SydApi { * @param iDealTimeOut 交易接口超时设定,单位毫秒(不超过10ms)。 * @return SydApi 的对象,只要有设备可用则返回。 */ - @Deprecated - SydApi SYD_Connect_Ex( + SydApi SYD_Short_Connect_Ex( String[] pcIpList, int[] iPortList, int iConnectTimeOut, diff --git a/src/main/java/com/sunyard/sge/database/SydApi4Database.java b/src/main/java/com/sunyard/sge/database/SydApi4Database.java index e4abe4c..3072bcf 100644 --- a/src/main/java/com/sunyard/sge/database/SydApi4Database.java +++ b/src/main/java/com/sunyard/sge/database/SydApi4Database.java @@ -28,12 +28,23 @@ public class SydApi4Database implements SydApi { } @Override - public SydApi SYD_Connect_Ex(String[] pcIpList, int[] iPortList, int iConnectTimeOut, int iDealTimeOut) { + public SydApi SYD_Short_Connect_Ex(String[] pcIpList, int[] iPortList, int iConnectTimeOut, int iDealTimeOut) { if (LogFactory.iLogLevel==3) { log.debug("SYD_Connect_Ex方法接收参数:pcIpList:{},iPortList:{},iConnectTimeOut:{},iDealTimeOut:{}", Arrays.toString(pcIpList), Arrays.toString(iPortList), iConnectTimeOut, iDealTimeOut); } - SydApi4j api = (SydApi4j) new SydApi4j().connect(pcIpList[0], iPortList[0], null, iConnectTimeOut); + if (iPortList==null||iPortList.length==0){ + throw new SydApiException("没有ip地址",-1); + } + if (iPortList.length!=iPortList.length) { + throw new SydApiException("ip与端口号数量不一致",-1); + } + SydApi4j api = null; + for (int i = 0; i < pcIpList.length ; i++) { + api = (SydApi4j) new SydApi4j().connect(pcIpList[i], iPortList[i], null, iConnectTimeOut); + } + hsms = new SydApi4j[]{api}; + isShortLinkMode = true; return this; } @@ -43,14 +54,18 @@ public class SydApi4Database implements SydApi { if ( null == hsms ){ return; } - - SydApi4j api = hsms[0]; - if (null != api) { - try { - api.disconnect(); - } catch (Exception e) { + SydApi4j api = null; + for (int i = 0; i < hsms.length; i++) { + api = hsms[i]; + if (null != api) { + try { + api.disconnect(); + } catch (Exception e) { + continue; + } } } + api = null; } // 配合链接池,不再需要释放。 @@ -124,7 +139,7 @@ public class SydApi4Database implements SydApi { if (LogFactory.iLogLevel==3) { log.debug("SYD_SM4_ShortData方法接收参数:iKeyIndex:{},pcData:{},iFlag:{}", iKeyIndex, Arrays.toString(pcData), iFlag); } - if (iFlag==Consts.ECB_DEC&&null==pcData||pcData.length==0){ + if (iFlag==Consts.ECB_DEC && null==pcData||pcData.length==0){ throw new SydApiException(19); } if (null == this.hsms || this.hsms.length < 1) { From 6ad20cd905cab695704165093943a2981c17f11f Mon Sep 17 00:00:00 2001 From: "junj2.liang" Date: Mon, 8 Aug 2022 18:10:48 +0800 Subject: [PATCH 07/11] fix bug --- .../sunyard/sge/database/SydApi4Database.java | 52 +++++++++++++------ .../sunyard/sge/database/SydApiBuilder.java | 3 +- .../sunyard/sge/database/pool/SydApiPool.java | 4 ++ src/test/java/sample/ShortLinkSample.java | 25 +++++++++ src/test/java/test/FuncTest.java | 38 ++++++++++++++ src/test/java/test/LogTest.java | 1 + src/test/java/test/PrefTest.java | 2 +- 7 files changed, 106 insertions(+), 19 deletions(-) create mode 100644 src/test/java/sample/ShortLinkSample.java diff --git a/src/main/java/com/sunyard/sge/database/SydApi4Database.java b/src/main/java/com/sunyard/sge/database/SydApi4Database.java index 3072bcf..1eefcab 100644 --- a/src/main/java/com/sunyard/sge/database/SydApi4Database.java +++ b/src/main/java/com/sunyard/sge/database/SydApi4Database.java @@ -14,11 +14,10 @@ import java.util.List; * 上海黄金交易所 - 数据库加密方案 */ public class SydApi4Database implements SydApi { - Logger log = LogFactory.getLogger(); + private SydApi4j[] hsms = null; private boolean isShortLinkMode = false; - @Deprecated public SydApi4Database() { isShortLinkMode = true; } @@ -29,21 +28,31 @@ public class SydApi4Database implements SydApi { @Override public SydApi SYD_Short_Connect_Ex(String[] pcIpList, int[] iPortList, int iConnectTimeOut, int iDealTimeOut) { + Logger log = LogFactory.getLogger(); if (LogFactory.iLogLevel==3) { log.debug("SYD_Connect_Ex方法接收参数:pcIpList:{},iPortList:{},iConnectTimeOut:{},iDealTimeOut:{}", Arrays.toString(pcIpList), Arrays.toString(iPortList), iConnectTimeOut, iDealTimeOut); } - if (iPortList==null||iPortList.length==0){ - throw new SydApiException("没有ip地址",-1); - } - if (iPortList.length!=iPortList.length) { - throw new SydApiException("ip与端口号数量不一致",-1); - } - SydApi4j api = null; - for (int i = 0; i < pcIpList.length ; i++) { - api = (SydApi4j) new SydApi4j().connect(pcIpList[i], iPortList[i], null, iConnectTimeOut); + + if (pcIpList.length!=iPortList.length) { + throw new IllegalArgumentException("ip与端口数量不一致"); } - hsms = new SydApi4j[]{api}; + SydApi4j[] apis = new SydApi4j[pcIpList.length]; + + for (int i = 0; i < pcIpList.length ; i++) { + + try { + + apis[i] = (SydApi4j) new SydApi4j().connect(pcIpList[i], iPortList[i], null, iConnectTimeOut); + + }catch ( Exception e) { + // 忽略错误 + log.error("网络连接错误 {} {} - 忽略",pcIpList[i], iPortList[i]); + } + + } + + hsms = apis; isShortLinkMode = true; return this; } @@ -54,25 +63,24 @@ public class SydApi4Database implements SydApi { if ( null == hsms ){ return; } - SydApi4j api = null; + for (int i = 0; i < hsms.length; i++) { - api = hsms[i]; + SydApi4j api = hsms[i]; if (null != api) { try { api.disconnect(); } catch (Exception e) { - continue; + } } } - - api = null; } // 配合链接池,不再需要释放。 } @Override public String SYD_SM3_Hash_ShortData(byte[] pcData) { + Logger log = LogFactory.getLogger(); if (LogFactory.iLogLevel==3) { log.debug("SYD_SM3_Hash_ShortData方法接收参数:pcData:{}", Arrays.toString(pcData)); } @@ -99,6 +107,7 @@ public class SydApi4Database implements SydApi { @Override public LongDataReturn SYD_SM3_Hash_LongData(byte[] pcData, int iPkgNum, String pcProcData) { + Logger log = LogFactory.getLogger(); if (LogFactory.iLogLevel==3) { log.debug("SYD_SM3_Hash_LongData方法接收参数:pcData:{},iPkgNum:{},pcProcData:{}", Arrays.toString(pcData), iPkgNum, pcProcData); } @@ -136,6 +145,7 @@ public class SydApi4Database implements SydApi { @Override public byte[] SYD_SM4_ShortData(int iKeyIndex, byte[] pcData, int iFlag) { + Logger log = LogFactory.getLogger(); if (LogFactory.iLogLevel==3) { log.debug("SYD_SM4_ShortData方法接收参数:iKeyIndex:{},pcData:{},iFlag:{}", iKeyIndex, Arrays.toString(pcData), iFlag); } @@ -177,6 +187,7 @@ public class SydApi4Database implements SydApi { @Override public List SYD_SM4_BatchData(int[] iKeyIndex, List pcData, int iFlag) { + Logger log = LogFactory.getLogger(); if (LogFactory.iLogLevel==3) { log.debug("SYD_SM4_BatchData方法接收参数:iKeyIndex:{},pcData元素个数为:{},iFlag:{}", iKeyIndex, pcData.size(), iFlag); } @@ -218,6 +229,7 @@ public class SydApi4Database implements SydApi { @Override public byte[] SYD_SM4_LongData(int iKeyIndex, byte[] pcData, int iPkgNum, int iFlag) { + Logger log = LogFactory.getLogger(); if (LogFactory.iLogLevel==3) { log.debug("SYD_SM4_LongData方法接收参数:iKeyIndex:{},pcData:{},iPkgNum:{},iFlag:{}", iKeyIndex, Arrays.toString(pcData), iPkgNum, iFlag); } @@ -261,6 +273,7 @@ public class SydApi4Database implements SydApi { @Override public String[] SYD_SM4Mac_BatchData(int[] iKeyIndex, List pcData) { + Logger log = LogFactory.getLogger(); if (LogFactory.iLogLevel==3) { log.debug("SYD_SM4Mac_BatchData:iKeyIndex:{},pcData元素个数为:{}", iKeyIndex, pcData.size()); } @@ -298,6 +311,7 @@ public class SydApi4Database implements SydApi { @Override public boolean[] SYD_SM4Mac_BatchData(int[] iKeyIndex, List pcData, String[] pcMac) { + Logger log = LogFactory.getLogger(); if (LogFactory.iLogLevel==3) { log.debug("SYD_SM4Mac_BatchData方法接收参数:iKeyIndex:{},pcData元素个数为:{},pcMac:{}", iKeyIndex, pcData.size(), Arrays.toString(pcMac)); } @@ -335,6 +349,7 @@ public class SydApi4Database implements SydApi { @Override public LongDataReturn SYD_SM4Mac_LongData(int iKeyIndex, byte[] pcData, int iPkgNum, String pcProcData) { + Logger log = LogFactory.getLogger(); if (LogFactory.iLogLevel==3) { log.debug("SYD_SM4Mac_LongData方法接收参数:iKeyIndex:{},pcData:{},iPkgNum:{},pcProcData:{}", iKeyIndex, Arrays.toString(pcData), iPkgNum, pcProcData); } @@ -385,6 +400,7 @@ public class SydApi4Database implements SydApi { @Override public LongDataReturn SYD_SM4Mac_LongData(int iKeyIndex, byte[] pcData, int iPkgNum, String pcProcData, String pcMac) { + Logger log = LogFactory.getLogger(); if (LogFactory.iLogLevel==3) { log.debug("SYD_SM4Mac_LongData方法接收参数:iKeyIndex:{},pcData:{},iPkgNum:{},pcProcData:{}", iKeyIndex, Arrays.toString(pcData), iPkgNum, pcProcData, pcMac); } @@ -401,6 +417,7 @@ public class SydApi4Database implements SydApi { @Override public String SYD_SM4Mac_ShortData(int iKeyIndex, byte[] pcData) { + Logger log = LogFactory.getLogger(); if (LogFactory.iLogLevel==3) { log.debug("SYD_SM4Mac_ShortData方法接收参数:iKeyIndex:{},pcData:{},iFlag:{}", iKeyIndex, Arrays.toString(pcData)); } @@ -429,6 +446,7 @@ public class SydApi4Database implements SydApi { @Override public boolean SYD_SM4Mac_ShortData(int iKeyIndex, byte[] pcData, String pcMac) { + Logger log = LogFactory.getLogger(); if (LogFactory.iLogLevel==3) { log.debug("SYD_SM4Mac_ShortData方法接收参数:{}", iKeyIndex, Arrays.toString(pcData), pcMac); } diff --git a/src/main/java/com/sunyard/sge/database/SydApiBuilder.java b/src/main/java/com/sunyard/sge/database/SydApiBuilder.java index a8ce660..34c4306 100644 --- a/src/main/java/com/sunyard/sge/database/SydApiBuilder.java +++ b/src/main/java/com/sunyard/sge/database/SydApiBuilder.java @@ -36,7 +36,7 @@ public class SydApiBuilder { SydApi api = null; try { api = new SydApi4Database(); - api.SYD_Connect_Ex( pcIpList, iPortList, iConnectTimeOut, iDealTimeOut ); + api.SYD_Short_Connect_Ex( pcIpList, iPortList, iConnectTimeOut, iDealTimeOut ); try { @@ -44,6 +44,7 @@ public class SydApiBuilder { }catch ( Exception e) { // 忽略 + } try { diff --git a/src/main/java/com/sunyard/sge/database/pool/SydApiPool.java b/src/main/java/com/sunyard/sge/database/pool/SydApiPool.java index 7239a2a..cab7c58 100644 --- a/src/main/java/com/sunyard/sge/database/pool/SydApiPool.java +++ b/src/main/java/com/sunyard/sge/database/pool/SydApiPool.java @@ -2,7 +2,9 @@ package com.sunyard.sge.database.pool; import com.sunyard.sge.database.SydApi; import com.sunyard.sge.database.SydApi4Database; +import com.sunyard.sge.log.LogFactory; import com.sunyard.sge.pool.ThreadBasedConnectPool; +import org.apache.logging.log4j.Logger; import racal.sunyard.main.SydApi4j; public class SydApiPool extends ThreadBasedConnectPool { @@ -33,7 +35,9 @@ public class SydApiPool extends ThreadBasedConnectPool { ); connected = true; } catch ( Exception e ) { + Logger log = LogFactory.getLogger(); // 忽略单个错误 + log.error("网络连接错误 {} {} - 忽略",info.getPcIp(),info.getiPort()); } } diff --git a/src/test/java/sample/ShortLinkSample.java b/src/test/java/sample/ShortLinkSample.java new file mode 100644 index 0000000..34ad022 --- /dev/null +++ b/src/test/java/sample/ShortLinkSample.java @@ -0,0 +1,25 @@ +package sample; + +import com.sunyard.sge.database.SydApi; +import com.sunyard.sge.database.SydApi4Database; + +public class ShortLinkSample { + + public static void main(String[] args) { + + // 路径要以 / 或 \\ 结尾表示目录 + SydApi.SYD_SetLogConfig("./logs/",3); + + String[] pcipList = {"127.0.0.1", "192.168.0.200" }; + int[] iportList ={8080,8889}; + SydApi api = new SydApi4Database(); + try { + api.SYD_Short_Connect_Ex(pcipList,iportList,10,10); + } finally { + if ( null != api ) { + api.SYD_Disconnect_Ex(); + } + } + + } +} diff --git a/src/test/java/test/FuncTest.java b/src/test/java/test/FuncTest.java index b220831..282f45b 100644 --- a/src/test/java/test/FuncTest.java +++ b/src/test/java/test/FuncTest.java @@ -1,9 +1,13 @@ package test; +import com.sunyard.sge.database.Consts; import com.sunyard.sge.database.SydApi; +import com.sunyard.sge.database.SydApi4Database; import com.sunyard.sge.database.SydApiBuilder; import com.sunyard.sge.database.pool.HsmLinkInfo; import com.sunyard.sge.database.pool.SydApiPool; +import com.sunyard.sge.log.LogFactory; +import org.apache.logging.log4j.Logger; import org.junit.Before; import org.junit.Test; @@ -23,6 +27,21 @@ public class FuncTest { } + @Test + public void syd_Short_Connect_Ex(){ + String[] pcipList = {"127.0.0.1", "192.168.0.200" }; + int[] iportList ={8080,8889}; + SydApi api = new SydApi4Database(); + try { + api.SYD_Short_Connect_Ex(pcipList,iportList,10,10); + } finally { + if ( null != api ) { + api.SYD_Disconnect_Ex(); + } + } + } + + @Test public void sm3(){ SydApiBuilder builder = new SydApiBuilder( @@ -35,4 +54,23 @@ public class FuncTest { api = builder.build(); } + + + @Test + public void origin() throws Exception { + SydApiBuilder builder = new SydApiBuilder(new String[]{"192.168.0.200"}, new int[]{8889}, 10, 15); + SydApi.SYD_SetLogConfig("./logs/",3); + Logger log = LogFactory.getLogger(); + final SydApi api = builder.build(); + for (int i = 0; i < 1000; i++) { + int tmp = i; + new Thread(() -> { + for (int j = 0; j < 20; j++) { + byte[] bytes = api.SYD_SM4_ShortData(0, (tmp + "t" + j).getBytes(), Consts.ECB_ENC); + byte[] result = api.SYD_SM4_ShortData(0, bytes, Consts.ECB_DEC); + System.out.println(Thread.currentThread().getName() + "," + new String(result)); + } + }, i + "t").start(); + } + } } diff --git a/src/test/java/test/LogTest.java b/src/test/java/test/LogTest.java index abf54e4..fdc57e2 100644 --- a/src/test/java/test/LogTest.java +++ b/src/test/java/test/LogTest.java @@ -14,5 +14,6 @@ public class LogTest { log.error("error"); log.info("info"); log.debug("debug"); + System.out.println(new byte[0].length); } } diff --git a/src/test/java/test/PrefTest.java b/src/test/java/test/PrefTest.java index a714e24..5bac877 100644 --- a/src/test/java/test/PrefTest.java +++ b/src/test/java/test/PrefTest.java @@ -18,7 +18,7 @@ public class PrefTest final SydApi api = new SydApi4Database(); try { - api.SYD_Connect_Ex( + api.SYD_Short_Connect_Ex( new String[]{ "192.168.0.200" }, new int[]{ 8889 }, 10, From 983459f816883a5c84cd41bfdfe6930d6594b4f7 Mon Sep 17 00:00:00 2001 From: "junj2.liang" Date: Mon, 8 Aug 2022 18:29:17 +0800 Subject: [PATCH 08/11] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=9F=AD=E9=93=BE?= =?UTF-8?q?=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/sunyard/sge/database/SydApi4Database.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/sunyard/sge/database/SydApi4Database.java b/src/main/java/com/sunyard/sge/database/SydApi4Database.java index 1eefcab..bb1191d 100644 --- a/src/main/java/com/sunyard/sge/database/SydApi4Database.java +++ b/src/main/java/com/sunyard/sge/database/SydApi4Database.java @@ -27,10 +27,10 @@ public class SydApi4Database implements SydApi { } @Override - public SydApi SYD_Short_Connect_Ex(String[] pcIpList, int[] iPortList, int iConnectTimeOut, int iDealTimeOut) { + public SydApi SYD_Short_Connect_Ex(String[] pcIpList, int[] iPortList, int iConnectTimeOut, int allDealTimeOut) { Logger log = LogFactory.getLogger(); if (LogFactory.iLogLevel==3) { - log.debug("SYD_Connect_Ex方法接收参数:pcIpList:{},iPortList:{},iConnectTimeOut:{},iDealTimeOut:{}", Arrays.toString(pcIpList), Arrays.toString(iPortList), iConnectTimeOut, iDealTimeOut); + log.debug("SYD_Connect_Ex方法接收参数:pcIpList:{},iPortList:{},iConnectTimeOut:{},iDealTimeOut:{}", Arrays.toString(pcIpList), Arrays.toString(iPortList), iConnectTimeOut, allDealTimeOut); } if (pcIpList.length!=iPortList.length) { @@ -38,12 +38,12 @@ public class SydApi4Database implements SydApi { } SydApi4j[] apis = new SydApi4j[pcIpList.length]; - + int iDealTimeOut = allDealTimeOut / pcIpList.length; for (int i = 0; i < pcIpList.length ; i++) { try { - apis[i] = (SydApi4j) new SydApi4j().connect(pcIpList[i], iPortList[i], null, iConnectTimeOut); + apis[i] = (SydApi4j) new SydApi4j().connect(pcIpList[i], iPortList[i], null, iConnectTimeOut, iDealTimeOut); }catch ( Exception e) { // 忽略错误 From 719388494b01278a69802c56b5f5d369ab03b2d0 Mon Sep 17 00:00:00 2001 From: "junj2.liang" Date: Tue, 9 Aug 2022 14:42:42 +0800 Subject: [PATCH 09/11] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=9F=AD=E9=93=BE?= =?UTF-8?q?=E6=8E=A5=E3=80=81=E4=BF=AE=E6=94=B9=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sunyard/sge/database/SydApi4Database.java | 58 ++++++++++++++----- .../sunyard/sge/database/pool/SydApiPool.java | 7 +++ 2 files changed, 49 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/sunyard/sge/database/SydApi4Database.java b/src/main/java/com/sunyard/sge/database/SydApi4Database.java index bb1191d..929e4a9 100644 --- a/src/main/java/com/sunyard/sge/database/SydApi4Database.java +++ b/src/main/java/com/sunyard/sge/database/SydApi4Database.java @@ -14,7 +14,7 @@ import java.util.List; * 上海黄金交易所 - 数据库加密方案 */ public class SydApi4Database implements SydApi { - + static Logger log = LogFactory.getLogger(); private SydApi4j[] hsms = null; private boolean isShortLinkMode = false; @@ -28,7 +28,6 @@ public class SydApi4Database implements SydApi { @Override public SydApi SYD_Short_Connect_Ex(String[] pcIpList, int[] iPortList, int iConnectTimeOut, int allDealTimeOut) { - Logger log = LogFactory.getLogger(); if (LogFactory.iLogLevel==3) { log.debug("SYD_Connect_Ex方法接收参数:pcIpList:{},iPortList:{},iConnectTimeOut:{},iDealTimeOut:{}", Arrays.toString(pcIpList), Arrays.toString(iPortList), iConnectTimeOut, allDealTimeOut); } @@ -39,18 +38,26 @@ public class SydApi4Database implements SydApi { SydApi4j[] apis = new SydApi4j[pcIpList.length]; int iDealTimeOut = allDealTimeOut / pcIpList.length; + boolean connected = false; for (int i = 0; i < pcIpList.length ; i++) { try { apis[i] = (SydApi4j) new SydApi4j().connect(pcIpList[i], iPortList[i], null, iConnectTimeOut, iDealTimeOut); - - }catch ( Exception e) { + connected = true; + } + catch ( Exception e) { // 忽略错误 log.error("网络连接错误 {} {} - 忽略",pcIpList[i], iPortList[i]); } } + if( ! connected ) { + // TODO + throw new SydApiException("连接错误",-1); + } + + hsms = apis; isShortLinkMode = true; @@ -76,11 +83,12 @@ public class SydApi4Database implements SydApi { } } // 配合链接池,不再需要释放。 + + } @Override public String SYD_SM3_Hash_ShortData(byte[] pcData) { - Logger log = LogFactory.getLogger(); if (LogFactory.iLogLevel==3) { log.debug("SYD_SM3_Hash_ShortData方法接收参数:pcData:{}", Arrays.toString(pcData)); } @@ -90,6 +98,11 @@ public class SydApi4Database implements SydApi { SydApiException le = null; for (SydApi4j api : this.hsms) { + + if ( null == api ) { + continue; + } + try { byte[] hash = api.SYD_SM3_LongData(pcData, null, 0); log.debug("api.SYD_SM3_LongData方法返回值:{}",Arrays.toString(hash)); @@ -107,7 +120,6 @@ public class SydApi4Database implements SydApi { @Override public LongDataReturn SYD_SM3_Hash_LongData(byte[] pcData, int iPkgNum, String pcProcData) { - Logger log = LogFactory.getLogger(); if (LogFactory.iLogLevel==3) { log.debug("SYD_SM3_Hash_LongData方法接收参数:pcData:{},iPkgNum:{},pcProcData:{}", Arrays.toString(pcData), iPkgNum, pcProcData); } @@ -124,6 +136,9 @@ public class SydApi4Database implements SydApi { } SydApiException le = null; for (SydApi4j api : this.hsms) { + if ( null == api ) { + continue; + } try { byte[] hash = api.SYD_SM3_LongData(pcData, procData, iPkgNum); log.debug("api.SYD_SM3_LongData方法返回值:{}",Arrays.toString(hash)); @@ -145,7 +160,6 @@ public class SydApi4Database implements SydApi { @Override public byte[] SYD_SM4_ShortData(int iKeyIndex, byte[] pcData, int iFlag) { - Logger log = LogFactory.getLogger(); if (LogFactory.iLogLevel==3) { log.debug("SYD_SM4_ShortData方法接收参数:iKeyIndex:{},pcData:{},iFlag:{}", iKeyIndex, Arrays.toString(pcData), iFlag); } @@ -159,8 +173,10 @@ public class SydApi4Database implements SydApi { String keyIndex = String.format("%08d", iKeyIndex); SydApiException le = null; for (SydApi4j api : this.hsms) { + if ( null == api ) { + continue; + } try { - if (Consts.ECB_ENC == iFlag) { return api.SYMEncryptData( com.sunyard.SydApi.NALG_SM4, @@ -187,7 +203,6 @@ public class SydApi4Database implements SydApi { @Override public List SYD_SM4_BatchData(int[] iKeyIndex, List pcData, int iFlag) { - Logger log = LogFactory.getLogger(); if (LogFactory.iLogLevel==3) { log.debug("SYD_SM4_BatchData方法接收参数:iKeyIndex:{},pcData元素个数为:{},iFlag:{}", iKeyIndex, pcData.size(), iFlag); } @@ -209,6 +224,9 @@ public class SydApi4Database implements SydApi { SydApiException le = null; for (SydApi4j api : this.hsms) { + if ( null == api ) { + continue; + } try { if (Consts.ECB_ENC == iFlag) { return api.SYMEncryptDecryptBatchData(8, 1, null, keys, 1, pcData); @@ -229,7 +247,6 @@ public class SydApi4Database implements SydApi { @Override public byte[] SYD_SM4_LongData(int iKeyIndex, byte[] pcData, int iPkgNum, int iFlag) { - Logger log = LogFactory.getLogger(); if (LogFactory.iLogLevel==3) { log.debug("SYD_SM4_LongData方法接收参数:iKeyIndex:{},pcData:{},iPkgNum:{},iFlag:{}", iKeyIndex, Arrays.toString(pcData), iPkgNum, iFlag); } @@ -243,6 +260,9 @@ public class SydApi4Database implements SydApi { SydApiException le = null; for (SydApi4j api : this.hsms) { + if ( null == api ) { + continue; + } try { if (Consts.ECB_ENC == iFlag) { return api.SYD_SM4_LongData( @@ -273,7 +293,6 @@ public class SydApi4Database implements SydApi { @Override public String[] SYD_SM4Mac_BatchData(int[] iKeyIndex, List pcData) { - Logger log = LogFactory.getLogger(); if (LogFactory.iLogLevel==3) { log.debug("SYD_SM4Mac_BatchData:iKeyIndex:{},pcData元素个数为:{}", iKeyIndex, pcData.size()); } @@ -287,6 +306,9 @@ public class SydApi4Database implements SydApi { } SydApiException le = null; for (SydApi4j api : this.hsms) { + if ( null == api ) { + continue; + } try { List list = api.SYMEncryptDecryptBatchData(8, 2, null, keys, 1, pcData); String[] ret = new String[list.size()]; @@ -311,7 +333,6 @@ public class SydApi4Database implements SydApi { @Override public boolean[] SYD_SM4Mac_BatchData(int[] iKeyIndex, List pcData, String[] pcMac) { - Logger log = LogFactory.getLogger(); if (LogFactory.iLogLevel==3) { log.debug("SYD_SM4Mac_BatchData方法接收参数:iKeyIndex:{},pcData元素个数为:{},pcMac:{}", iKeyIndex, pcData.size(), Arrays.toString(pcMac)); } @@ -325,6 +346,9 @@ public class SydApi4Database implements SydApi { } SydApiException le = null; for (SydApi4j api : this.hsms) { + if ( null == api ) { + continue; + } try { List list = api.SYMEncryptDecryptBatchData(8, 2, null, keys, 1, pcData); boolean[] ret = new boolean[list.size()]; @@ -349,7 +373,6 @@ public class SydApi4Database implements SydApi { @Override public LongDataReturn SYD_SM4Mac_LongData(int iKeyIndex, byte[] pcData, int iPkgNum, String pcProcData) { - Logger log = LogFactory.getLogger(); if (LogFactory.iLogLevel==3) { log.debug("SYD_SM4Mac_LongData方法接收参数:iKeyIndex:{},pcData:{},iPkgNum:{},pcProcData:{}", iKeyIndex, Arrays.toString(pcData), iPkgNum, pcProcData); } @@ -368,6 +391,9 @@ public class SydApi4Database implements SydApi { SydApiException le = null; for (SydApi4j api : this.hsms) { + if ( null == api ) { + continue; + } try { byte[] ret = api.SYD_SM4_LongData( 8, @@ -400,7 +426,6 @@ public class SydApi4Database implements SydApi { @Override public LongDataReturn SYD_SM4Mac_LongData(int iKeyIndex, byte[] pcData, int iPkgNum, String pcProcData, String pcMac) { - Logger log = LogFactory.getLogger(); if (LogFactory.iLogLevel==3) { log.debug("SYD_SM4Mac_LongData方法接收参数:iKeyIndex:{},pcData:{},iPkgNum:{},pcProcData:{}", iKeyIndex, Arrays.toString(pcData), iPkgNum, pcProcData, pcMac); } @@ -417,7 +442,6 @@ public class SydApi4Database implements SydApi { @Override public String SYD_SM4Mac_ShortData(int iKeyIndex, byte[] pcData) { - Logger log = LogFactory.getLogger(); if (LogFactory.iLogLevel==3) { log.debug("SYD_SM4Mac_ShortData方法接收参数:iKeyIndex:{},pcData:{},iFlag:{}", iKeyIndex, Arrays.toString(pcData)); } @@ -429,6 +453,9 @@ public class SydApi4Database implements SydApi { log.debug("\"SK\" + SYMUtil.genPrivateKeyMark方法返回值:{}",keyIndex); SydApiException le = null; for (SydApi4j api : this.hsms) { + if ( null == api ) { + continue; + } try { return api.SYD_SM4Mac_ShortData(keyIndex, pcData); @@ -446,7 +473,6 @@ public class SydApi4Database implements SydApi { @Override public boolean SYD_SM4Mac_ShortData(int iKeyIndex, byte[] pcData, String pcMac) { - Logger log = LogFactory.getLogger(); if (LogFactory.iLogLevel==3) { log.debug("SYD_SM4Mac_ShortData方法接收参数:{}", iKeyIndex, Arrays.toString(pcData), pcMac); } diff --git a/src/main/java/com/sunyard/sge/database/pool/SydApiPool.java b/src/main/java/com/sunyard/sge/database/pool/SydApiPool.java index cab7c58..4650f7c 100644 --- a/src/main/java/com/sunyard/sge/database/pool/SydApiPool.java +++ b/src/main/java/com/sunyard/sge/database/pool/SydApiPool.java @@ -1,5 +1,6 @@ package com.sunyard.sge.database.pool; +import com.sunyard.SydApiException; import com.sunyard.sge.database.SydApi; import com.sunyard.sge.database.SydApi4Database; import com.sunyard.sge.log.LogFactory; @@ -41,6 +42,12 @@ public class SydApiPool extends ThreadBasedConnectPool { } } + if( ! connected ) { + // TODO + throw new SydApiException("连接错误",-1); + } + + return new SydApi4Database( apis ); } From 004e6451ee34bbc1a6ea98800d776ed89a46857e Mon Sep 17 00:00:00 2001 From: "junj2.liang" Date: Tue, 9 Aug 2022 15:35:22 +0800 Subject: [PATCH 10/11] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=9F=AD=E9=93=BE?= =?UTF-8?q?=E6=8E=A5=E3=80=81=E4=BF=AE=E6=94=B9=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sunyard/sge/database/SydApi4Database.java | 97 +++++++++++-------- .../sunyard/sge/database/SydApiBuilder.java | 5 +- .../sge/database/pool/HsmLinkInfo.java | 7 +- .../sunyard/sge/database/pool/SydApiPool.java | 3 + .../java/com/sunyard/sge/log/LogFactory.java | 2 +- .../sge/pool/ThreadBasedConnectPool.java | 6 +- 6 files changed, 75 insertions(+), 45 deletions(-) diff --git a/src/main/java/com/sunyard/sge/database/SydApi4Database.java b/src/main/java/com/sunyard/sge/database/SydApi4Database.java index 929e4a9..515a517 100644 --- a/src/main/java/com/sunyard/sge/database/SydApi4Database.java +++ b/src/main/java/com/sunyard/sge/database/SydApi4Database.java @@ -14,7 +14,11 @@ import java.util.List; * 上海黄金交易所 - 数据库加密方案 */ public class SydApi4Database implements SydApi { - static Logger log = LogFactory.getLogger(); + + static { + SydApi.SYD_SetLogConfig("./logs/", 0); + } + private SydApi4j[] hsms = null; private boolean isShortLinkMode = false; @@ -28,37 +32,36 @@ public class SydApi4Database implements SydApi { @Override public SydApi SYD_Short_Connect_Ex(String[] pcIpList, int[] iPortList, int iConnectTimeOut, int allDealTimeOut) { - if (LogFactory.iLogLevel==3) { + Logger log = LogFactory.getLogger(); + if (LogFactory.iLogLevel == 3) { log.debug("SYD_Connect_Ex方法接收参数:pcIpList:{},iPortList:{},iConnectTimeOut:{},iDealTimeOut:{}", Arrays.toString(pcIpList), Arrays.toString(iPortList), iConnectTimeOut, allDealTimeOut); } - if (pcIpList.length!=iPortList.length) { + if (pcIpList.length != iPortList.length) { throw new IllegalArgumentException("ip与端口数量不一致"); } SydApi4j[] apis = new SydApi4j[pcIpList.length]; int iDealTimeOut = allDealTimeOut / pcIpList.length; boolean connected = false; - for (int i = 0; i < pcIpList.length ; i++) { + for (int i = 0; i < pcIpList.length; i++) { try { apis[i] = (SydApi4j) new SydApi4j().connect(pcIpList[i], iPortList[i], null, iConnectTimeOut, iDealTimeOut); connected = true; - } - catch ( Exception e) { + } catch (Exception e) { // 忽略错误 - log.error("网络连接错误 {} {} - 忽略",pcIpList[i], iPortList[i]); + log.error("网络连接错误 {} {} - 忽略", pcIpList[i], iPortList[i]); } } - if( ! connected ) { + if (!connected) { // TODO - throw new SydApiException("连接错误",-1); + throw new SydApiException("连接错误", -1); } - hsms = apis; isShortLinkMode = true; return this; @@ -67,7 +70,7 @@ public class SydApi4Database implements SydApi { @Override public void SYD_Disconnect_Ex() { if (isShortLinkMode) { - if ( null == hsms ){ + if (null == hsms) { return; } @@ -89,7 +92,8 @@ public class SydApi4Database implements SydApi { @Override public String SYD_SM3_Hash_ShortData(byte[] pcData) { - if (LogFactory.iLogLevel==3) { + Logger log = LogFactory.getLogger(); + if (LogFactory.iLogLevel == 3) { log.debug("SYD_SM3_Hash_ShortData方法接收参数:pcData:{}", Arrays.toString(pcData)); } if (null == this.hsms || this.hsms.length < 1) { @@ -99,13 +103,13 @@ public class SydApi4Database implements SydApi { SydApiException le = null; for (SydApi4j api : this.hsms) { - if ( null == api ) { + if (null == api) { continue; } try { byte[] hash = api.SYD_SM3_LongData(pcData, null, 0); - log.debug("api.SYD_SM3_LongData方法返回值:{}",Arrays.toString(hash)); + log.debug("api.SYD_SM3_LongData方法返回值:{}", Arrays.toString(hash)); return Util.bytes2HexString(hash); } catch (SydApiException e) { le = e; @@ -120,7 +124,8 @@ public class SydApi4Database implements SydApi { @Override public LongDataReturn SYD_SM3_Hash_LongData(byte[] pcData, int iPkgNum, String pcProcData) { - if (LogFactory.iLogLevel==3) { + Logger log = LogFactory.getLogger(); + if (LogFactory.iLogLevel == 3) { log.debug("SYD_SM3_Hash_LongData方法接收参数:pcData:{},iPkgNum:{},pcProcData:{}", Arrays.toString(pcData), iPkgNum, pcProcData); } @@ -131,17 +136,17 @@ public class SydApi4Database implements SydApi { byte[] procData = null; if (2 == iPkgNum || 3 == iPkgNum) { procData = Util.hexString2Bytes(pcProcData); - log.debug("Util.hexString2Bytes方法返回值:{}",Arrays.toString(procData)); + log.debug("Util.hexString2Bytes方法返回值:{}", Arrays.toString(procData)); } SydApiException le = null; for (SydApi4j api : this.hsms) { - if ( null == api ) { + if (null == api) { continue; } try { byte[] hash = api.SYD_SM3_LongData(pcData, procData, iPkgNum); - log.debug("api.SYD_SM3_LongData方法返回值:{}",Arrays.toString(hash)); + log.debug("api.SYD_SM3_LongData方法返回值:{}", Arrays.toString(hash)); if (0 == iPkgNum || 3 == iPkgNum) { return new LongDataReturn(null, Util.bytes2HexString(hash)); } else { @@ -160,10 +165,11 @@ public class SydApi4Database implements SydApi { @Override public byte[] SYD_SM4_ShortData(int iKeyIndex, byte[] pcData, int iFlag) { - if (LogFactory.iLogLevel==3) { + Logger log = LogFactory.getLogger(); + if (LogFactory.iLogLevel == 3) { log.debug("SYD_SM4_ShortData方法接收参数:iKeyIndex:{},pcData:{},iFlag:{}", iKeyIndex, Arrays.toString(pcData), iFlag); } - if (iFlag==Consts.ECB_DEC && null==pcData||pcData.length==0){ + if (iFlag == Consts.ECB_DEC && null == pcData || pcData.length == 0) { throw new SydApiException(19); } if (null == this.hsms || this.hsms.length < 1) { @@ -173,7 +179,7 @@ public class SydApi4Database implements SydApi { String keyIndex = String.format("%08d", iKeyIndex); SydApiException le = null; for (SydApi4j api : this.hsms) { - if ( null == api ) { + if (null == api) { continue; } try { @@ -203,12 +209,13 @@ public class SydApi4Database implements SydApi { @Override public List SYD_SM4_BatchData(int[] iKeyIndex, List pcData, int iFlag) { - if (LogFactory.iLogLevel==3) { + Logger log = LogFactory.getLogger(); + if (LogFactory.iLogLevel == 3) { log.debug("SYD_SM4_BatchData方法接收参数:iKeyIndex:{},pcData元素个数为:{},iFlag:{}", iKeyIndex, pcData.size(), iFlag); } - if (iFlag==Consts.ECB_DEC){ - for (byte[] pcdata:pcData){ - if (null==pcData||pcdata.length==0) { + if (iFlag == Consts.ECB_DEC) { + for (byte[] pcdata : pcData) { + if (null == pcData || pcdata.length == 0) { throw new SydApiException(19); } } @@ -224,7 +231,7 @@ public class SydApi4Database implements SydApi { SydApiException le = null; for (SydApi4j api : this.hsms) { - if ( null == api ) { + if (null == api) { continue; } try { @@ -247,10 +254,11 @@ public class SydApi4Database implements SydApi { @Override public byte[] SYD_SM4_LongData(int iKeyIndex, byte[] pcData, int iPkgNum, int iFlag) { - if (LogFactory.iLogLevel==3) { + Logger log = LogFactory.getLogger(); + if (LogFactory.iLogLevel == 3) { log.debug("SYD_SM4_LongData方法接收参数:iKeyIndex:{},pcData:{},iPkgNum:{},iFlag:{}", iKeyIndex, Arrays.toString(pcData), iPkgNum, iFlag); } - if (iFlag==Consts.ECB_DEC&&null==pcData||pcData.length==0){ + if (iFlag == Consts.ECB_DEC && null == pcData || pcData.length == 0) { throw new SydApiException(19); } if (null == this.hsms || this.hsms.length < 1) { @@ -260,7 +268,7 @@ public class SydApi4Database implements SydApi { SydApiException le = null; for (SydApi4j api : this.hsms) { - if ( null == api ) { + if (null == api) { continue; } try { @@ -293,7 +301,8 @@ public class SydApi4Database implements SydApi { @Override public String[] SYD_SM4Mac_BatchData(int[] iKeyIndex, List pcData) { - if (LogFactory.iLogLevel==3) { + Logger log = LogFactory.getLogger(); + if (LogFactory.iLogLevel == 3) { log.debug("SYD_SM4Mac_BatchData:iKeyIndex:{},pcData元素个数为:{}", iKeyIndex, pcData.size()); } if (null == this.hsms || this.hsms.length < 1) { @@ -306,7 +315,7 @@ public class SydApi4Database implements SydApi { } SydApiException le = null; for (SydApi4j api : this.hsms) { - if ( null == api ) { + if (null == api) { continue; } try { @@ -333,7 +342,8 @@ public class SydApi4Database implements SydApi { @Override public boolean[] SYD_SM4Mac_BatchData(int[] iKeyIndex, List pcData, String[] pcMac) { - if (LogFactory.iLogLevel==3) { + Logger log = LogFactory.getLogger(); + if (LogFactory.iLogLevel == 3) { log.debug("SYD_SM4Mac_BatchData方法接收参数:iKeyIndex:{},pcData元素个数为:{},pcMac:{}", iKeyIndex, pcData.size(), Arrays.toString(pcMac)); } if (null == this.hsms || this.hsms.length < 1) { @@ -346,7 +356,7 @@ public class SydApi4Database implements SydApi { } SydApiException le = null; for (SydApi4j api : this.hsms) { - if ( null == api ) { + if (null == api) { continue; } try { @@ -373,7 +383,8 @@ public class SydApi4Database implements SydApi { @Override public LongDataReturn SYD_SM4Mac_LongData(int iKeyIndex, byte[] pcData, int iPkgNum, String pcProcData) { - if (LogFactory.iLogLevel==3) { + Logger log = LogFactory.getLogger(); + if (LogFactory.iLogLevel == 3) { log.debug("SYD_SM4Mac_LongData方法接收参数:iKeyIndex:{},pcData:{},iPkgNum:{},pcProcData:{}", iKeyIndex, Arrays.toString(pcData), iPkgNum, pcProcData); } if (null == this.hsms || this.hsms.length < 1) { @@ -391,7 +402,7 @@ public class SydApi4Database implements SydApi { SydApiException le = null; for (SydApi4j api : this.hsms) { - if ( null == api ) { + if (null == api) { continue; } try { @@ -416,6 +427,7 @@ public class SydApi4Database implements SydApi { } catch (SydApiException e) { le = e; if (e.getRetCode() < 0) { + log.error("HA 重试"); continue; } throw e; @@ -426,7 +438,8 @@ public class SydApi4Database implements SydApi { @Override public LongDataReturn SYD_SM4Mac_LongData(int iKeyIndex, byte[] pcData, int iPkgNum, String pcProcData, String pcMac) { - if (LogFactory.iLogLevel==3) { + Logger log = LogFactory.getLogger(); + if (LogFactory.iLogLevel == 3) { log.debug("SYD_SM4Mac_LongData方法接收参数:iKeyIndex:{},pcData:{},iPkgNum:{},pcProcData:{}", iKeyIndex, Arrays.toString(pcData), iPkgNum, pcProcData, pcMac); } LongDataReturn ret = SYD_SM4Mac_LongData(iKeyIndex, pcData, iPkgNum, pcProcData); @@ -442,7 +455,8 @@ public class SydApi4Database implements SydApi { @Override public String SYD_SM4Mac_ShortData(int iKeyIndex, byte[] pcData) { - if (LogFactory.iLogLevel==3) { + Logger log = LogFactory.getLogger(); + if (LogFactory.iLogLevel == 3) { log.debug("SYD_SM4Mac_ShortData方法接收参数:iKeyIndex:{},pcData:{},iFlag:{}", iKeyIndex, Arrays.toString(pcData)); } if (null == this.hsms || this.hsms.length < 1) { @@ -450,10 +464,10 @@ public class SydApi4Database implements SydApi { } String keyIndex = "SK" + SYMUtil.genPrivateKeyMark("000000", "00A", String.format("%08d", iKeyIndex)); - log.debug("\"SK\" + SYMUtil.genPrivateKeyMark方法返回值:{}",keyIndex); + log.debug("\"SK\" + SYMUtil.genPrivateKeyMark方法返回值:{}", keyIndex); SydApiException le = null; for (SydApi4j api : this.hsms) { - if ( null == api ) { + if (null == api) { continue; } try { @@ -473,7 +487,8 @@ public class SydApi4Database implements SydApi { @Override public boolean SYD_SM4Mac_ShortData(int iKeyIndex, byte[] pcData, String pcMac) { - if (LogFactory.iLogLevel==3) { + Logger log = LogFactory.getLogger(); + if (LogFactory.iLogLevel == 3) { log.debug("SYD_SM4Mac_ShortData方法接收参数:{}", iKeyIndex, Arrays.toString(pcData), pcMac); } if (null == this.hsms || this.hsms.length < 1) { @@ -485,7 +500,7 @@ public class SydApi4Database implements SydApi { } String mac = this.SYD_SM4Mac_ShortData(iKeyIndex, pcData); - log.debug(this+".SYD_SM4Mac_ShortData方法返回值:{}",mac); + log.debug(this + ".SYD_SM4Mac_ShortData方法返回值:{}", mac); return pcMac.equals(mac); } } diff --git a/src/main/java/com/sunyard/sge/database/SydApiBuilder.java b/src/main/java/com/sunyard/sge/database/SydApiBuilder.java index 34c4306..e91daad 100644 --- a/src/main/java/com/sunyard/sge/database/SydApiBuilder.java +++ b/src/main/java/com/sunyard/sge/database/SydApiBuilder.java @@ -8,7 +8,9 @@ import org.apache.logging.log4j.Logger; import java.util.Arrays; public class SydApiBuilder { - Logger log = LogFactory.getLogger(); + static { + SydApi.SYD_SetLogConfig("./logs/", 0); + } private SydApiPool pool; public SydApiBuilder( String[] pcIpList, @@ -16,6 +18,7 @@ public class SydApiBuilder { int iConnectTimeOut, int iDealTimeOut ) { + Logger log = LogFactory.getLogger(); log.debug("创建链接"); log.debug("SydApiBuilder构造方法接收参数:pcIpList:{},iPortList:{},iConnectTimeOut:{},iDealTimeOut:{}", Arrays.toString(pcIpList),Arrays.toString(iPortList),iConnectTimeOut,iDealTimeOut); HsmLinkInfo[] linkInfo = HsmLinkInfo.mutiHsmLinkInfo(pcIpList, iPortList, iConnectTimeOut, iDealTimeOut); diff --git a/src/main/java/com/sunyard/sge/database/pool/HsmLinkInfo.java b/src/main/java/com/sunyard/sge/database/pool/HsmLinkInfo.java index f0b9d4e..510b055 100644 --- a/src/main/java/com/sunyard/sge/database/pool/HsmLinkInfo.java +++ b/src/main/java/com/sunyard/sge/database/pool/HsmLinkInfo.java @@ -1,6 +1,7 @@ package com.sunyard.sge.database.pool; +import com.sunyard.sge.database.SydApi; import com.sunyard.sge.log.LogFactory; import org.apache.logging.log4j.Logger; @@ -11,6 +12,10 @@ import java.util.Arrays; * 到加密机的链接信息 */ public class HsmLinkInfo { + static { + SydApi.SYD_SetLogConfig("./logs/", 0); + } + static Logger log = LogFactory.getLogger(); private String pcIp; private int iPort; private int iConnectTimeOut; @@ -25,7 +30,7 @@ public class HsmLinkInfo { } public static HsmLinkInfo[] mutiHsmLinkInfo(String[] pcIpList, int[] iPortList, int iConnectTimeOut, int iAllDealTimeOut) { - Logger log = LogFactory.getLogger(); + log.debug("mutiHsmLinkInfo方法接收参数:pcIpList:{},iPortList:{},iConnectTimeOut:{},iDealTimeOut:{}", Arrays.toString(pcIpList),Arrays.toString(iPortList),iConnectTimeOut,iAllDealTimeOut); log.debug("链接参数整理"); if (null == pcIpList && diff --git a/src/main/java/com/sunyard/sge/database/pool/SydApiPool.java b/src/main/java/com/sunyard/sge/database/pool/SydApiPool.java index 4650f7c..92c7504 100644 --- a/src/main/java/com/sunyard/sge/database/pool/SydApiPool.java +++ b/src/main/java/com/sunyard/sge/database/pool/SydApiPool.java @@ -9,6 +9,9 @@ import org.apache.logging.log4j.Logger; import racal.sunyard.main.SydApi4j; public class SydApiPool extends ThreadBasedConnectPool { + static { + SydApi.SYD_SetLogConfig("./logs/", 0); + } private HsmLinkInfo[] linkInfos; diff --git a/src/main/java/com/sunyard/sge/log/LogFactory.java b/src/main/java/com/sunyard/sge/log/LogFactory.java index 7263638..da44769 100644 --- a/src/main/java/com/sunyard/sge/log/LogFactory.java +++ b/src/main/java/com/sunyard/sge/log/LogFactory.java @@ -62,7 +62,7 @@ public class LogFactory { // 日志打印方式——输出为文件    Appender appender = FileAppender.createAppender( - String.format( pcLogPath + getToday() + ".log"), + String.format( pcLogPath +"sydapi_"+getToday() + ".log"), "true", "false", logName, null, "true", "true", null, layout, null, null, null, config); diff --git a/src/main/java/com/sunyard/sge/pool/ThreadBasedConnectPool.java b/src/main/java/com/sunyard/sge/pool/ThreadBasedConnectPool.java index 8324800..f1b2203 100644 --- a/src/main/java/com/sunyard/sge/pool/ThreadBasedConnectPool.java +++ b/src/main/java/com/sunyard/sge/pool/ThreadBasedConnectPool.java @@ -1,5 +1,7 @@ package com.sunyard.sge.pool; +import com.sunyard.sge.database.SydApi; +import com.sunyard.sge.database.SydApi4Database; import com.sunyard.sge.log.LogFactory; import org.apache.logging.log4j.Logger; @@ -12,7 +14,9 @@ import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; public class ThreadBasedConnectPool { - + static { + SydApi.SYD_SetLogConfig("./logs/", 0); + } // ThreadLocal private final Map> map = new HashMap<>(); From 5243ec1fe1d05a576df2b3bb1e43effc9394aebd Mon Sep 17 00:00:00 2001 From: "junj2.liang" Date: Tue, 9 Aug 2022 15:38:34 +0800 Subject: [PATCH 11/11] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=9F=AD=E9=93=BE?= =?UTF-8?q?=E6=8E=A5=E3=80=81=E6=B7=BB=E5=8A=A0=E6=B5=8B=E8=AF=95=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sunyard/sge/database/SydApi4Database.java | 8 ++++++ src/test/java/test/FuncTest.java | 28 ++++++++++++++++++- 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/sunyard/sge/database/SydApi4Database.java b/src/main/java/com/sunyard/sge/database/SydApi4Database.java index 515a517..35f541c 100644 --- a/src/main/java/com/sunyard/sge/database/SydApi4Database.java +++ b/src/main/java/com/sunyard/sge/database/SydApi4Database.java @@ -114,6 +114,7 @@ public class SydApi4Database implements SydApi { } catch (SydApiException e) { le = e; if (e.getRetCode() < 0) { + log.error("HA 重试"); continue; } throw e; @@ -155,6 +156,7 @@ public class SydApi4Database implements SydApi { } catch (SydApiException e) { le = e; if (e.getRetCode() < 0) { + log.error("HA 重试"); continue; } throw e; @@ -199,6 +201,7 @@ public class SydApi4Database implements SydApi { } catch (SydApiException e) { le = e; if (e.getRetCode() < 0) { + log.error("HA 重试"); continue; } throw e; @@ -244,6 +247,7 @@ public class SydApi4Database implements SydApi { } catch (SydApiException e) { le = e; if (e.getRetCode() < 0) { + log.error("HA 重试"); continue; } throw e; @@ -291,6 +295,7 @@ public class SydApi4Database implements SydApi { } catch (SydApiException e) { le = e; if (e.getRetCode() < 0) { + log.error("HA 重试"); continue; } throw e; @@ -332,6 +337,7 @@ public class SydApi4Database implements SydApi { } catch (SydApiException e) { le = e; if (e.getRetCode() < 0) { + log.error("HA 重试"); continue; } throw e; @@ -373,6 +379,7 @@ public class SydApi4Database implements SydApi { } catch (SydApiException e) { le = e; if (e.getRetCode() < 0) { + log.error("HA 重试"); continue; } throw e; @@ -477,6 +484,7 @@ public class SydApi4Database implements SydApi { } catch (SydApiException e) { le = e; if (e.getRetCode() < 0) { + log.error("HA 重试"); continue; } throw e; diff --git a/src/test/java/test/FuncTest.java b/src/test/java/test/FuncTest.java index 282f45b..bb66b5a 100644 --- a/src/test/java/test/FuncTest.java +++ b/src/test/java/test/FuncTest.java @@ -57,7 +57,7 @@ public class FuncTest { @Test - public void origin() throws Exception { + public void originLong() throws Exception { SydApiBuilder builder = new SydApiBuilder(new String[]{"192.168.0.200"}, new int[]{8889}, 10, 15); SydApi.SYD_SetLogConfig("./logs/",3); Logger log = LogFactory.getLogger(); @@ -73,4 +73,30 @@ public class FuncTest { }, i + "t").start(); } } + @Test + public void originShort() throws Exception { + SydApi.SYD_SetLogConfig("./logs/",3); + Logger log = LogFactory.getLogger(); + String[] pcipList = {"192.168.0.200", "192.168.0.200", "192.168.0.200" }; + int[] iportList ={8080,8889,8889}; + + for (int i = 0; i < 1000; i++) { + int tmp = i; + new Thread(() -> { + try { + SydApi api = new SydApi4Database(); + for (int j = 0; j < 20; j++) { + api.SYD_Short_Connect_Ex(pcipList,iportList,10,15); + byte[] bytes = api.SYD_SM4_ShortData(0, (tmp + "t" + j).getBytes(), Consts.ECB_ENC); + byte[] result = api.SYD_SM4_ShortData(0, bytes, Consts.ECB_DEC); + System.out.println(Thread.currentThread().getName() + "," + new String(result)); + } + } + finally { + if ( null != api ) { + api.SYD_Disconnect_Ex(); + } + } } , i + "t").start(); + } + } }