diff --git a/src/main/java/com/jmeter/test/Test4Jemter.java b/src/main/java/com/jmeter/test/Test4Jemter.java new file mode 100644 index 0000000..e5cd733 --- /dev/null +++ b/src/main/java/com/jmeter/test/Test4Jemter.java @@ -0,0 +1,217 @@ +package com.jmeter.test; + +import com.sunyard.SydApiException; +import com.sunyard.proto.Util; +import org.apache.jmeter.config.Arguments; +import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient; +import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext; +import org.apache.jmeter.samplers.SampleResult; +import racal.sunyard.main.SydApi4j; +import racal.sunyard.main.SydApiBuilder; + +import java.nio.charset.StandardCharsets; + + +public class Test4Jemter extends AbstractJavaSamplerClient { + + private String SM2dn ; + private String RSAdn ; + private String ip ; + private String ip2 ; + private String oData; + private String sign; + private byte[] orgData; + + private int type; + + private static ThreadLocal api; + + + /** + * 定义默认的参数,在jmeter中会自动显示在这里定义的默认参数 + * @return Arguments对象 + */ + @Override + public Arguments getDefaultParameters() { + Arguments arguments = new Arguments(); + arguments.addArgument("SM2dn", "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"); + arguments.addArgument("RSAdn", "C=cn,O=CFCA TEST CA,OU=NCS2,OU=Enterprises,CN=041@Z402451000010@ShanDong@00000001"); + arguments.addArgument("orgData", "12345678"); + arguments.addArgument("ip", "192.168.0.166"); + // arguments.addArgument("ip2", "172.16.17.161"); + arguments.addArgument("type", "1"); + arguments.addArgument("sign", "12345678"); + return arguments; + } + + /** + * 在执行测试之前执行,只执行一次,可以获取传递过来的参数,一般用来做初始化操作 + * @param context 可以获取jmeter传递过来的参数 + */ + @Override + public void setupTest(JavaSamplerContext context) { + //对成员变量初始化 + SM2dn = context.getParameter("SM2dn"); + RSAdn = context.getParameter("RSAdn"); + oData = context.getParameter("orgData"); + ip = context.getParameter("ip"); + // ip2 = context.getParameter("ip2"); + type = context.getIntParameter("type"); + sign = context.getParameter("sign"); + System.setProperty("com.sunyard.dnsort", "false"); + api = new ThreadLocal() { + public SydApi4j initialValue() { + + SydApiBuilder builder = new SydApiBuilder().setIp(ip); + final SydApi4j api = (SydApi4j) builder.build(); + return api; + } + }; + + } + + /** + * 真正的测试代码块,jmeter按照配置的逻辑执行该方法 + * @param javaSamplerContext 上下文对象,可以获取jmeter传递的参数 + * @return SampleResult对象用于封装结果 + */ + @Override + public SampleResult runTest(JavaSamplerContext javaSamplerContext) { + SampleResult sr = new SampleResult(); + //设置标签 + sr.setSampleLabel("testDemo"); + //设置开始标志,否则无法统计tps等 + sr.sampleStart(); + try { + orgData = oData.getBytes(); //SM2裸签 + //执行业务逻辑 + switch(type){ + case 1: + api.get().SYD_NakedSign(SM2dn, orgData, (byte[]) null); + sr.setResponseCodeOK(); + //sr.setResponseData(Util.encodeBase64(nakedSign1), StandardCharsets.UTF_8.displayName()); + break; + + + case 2: + api.get().SYD_NakedVerify(SM2dn, Util.decodeBase64(sign), orgData, (byte[])null) ; + sr.setResponseCodeOK(); + //sr.setResponseData(String.valueOf(nakedVerify1), StandardCharsets.UTF_8.displayName()); + break; + + case 3: + //RSA裸签 + api.get().SYD_NakedSign(1, RSAdn,orgData,(byte[])null); + sr.setResponseCodeOK(); + //sr.setResponseData(Util.encodeBase64(nakedSign2), StandardCharsets.UTF_8.displayName()); + break; + + case 4: + api.get().SYD_NakedVerify(1, RSAdn,Util.decodeBase64(sign),orgData ,(byte[])null); + sr.setResponseCodeOK(); + //sr.setResponseData(String.valueOf(nakedVerify2), StandardCharsets.UTF_8.displayName()); + break; + + case 5: + api.get().detachedSign(1, orgData, SM2dn); + sr.setResponseCodeOK(); + //sr.setResponseData(detSign1, StandardCharsets.UTF_8.displayName()); + break; + + case 6: + api.get().detachedVerify(1, orgData, sign); + sr.setResponseCodeOK(); + //sr.setResponseData(String.valueOf(detV1), StandardCharsets.UTF_8.displayName()); + break; + + case 7: + api.get().detachedSign(2,1, orgData, RSAdn); + sr.setResponseCodeOK(); + //sr.setResponseData(detSign2, StandardCharsets.UTF_8.displayName()); + break; + + case 8: + api.get().detachedVerify(2,2, orgData, sign); + sr.setResponseCodeOK(); + //sr.setResponseData(String.valueOf(detV2), StandardCharsets.UTF_8.displayName()); + break; + + case 9: + api.get().attachedSignHsm(orgData, SM2dn); + sr.setResponseCodeOK(); + //sr.setResponseData(attSign1, StandardCharsets.UTF_8.displayName()); + break; + + case 10: + api.get().attachedVerify( sign.getBytes()); + sr.setResponseCodeOK(); + // sr.setResponseData(String.valueOf(attV1), StandardCharsets.UTF_8.displayName()); + break; + + case 11: + api.get().attachedSignRSAHsm(2, orgData, RSAdn); + sr.setResponseCodeOK(); + // sr.setResponseData(attSign2, StandardCharsets.UTF_8.displayName()); + break; + + case 12: + api.get().attachedVerifyRSA(2, sign); + sr.setResponseCodeOK(); + // sr.setResponseData(String.valueOf(attV2), StandardCharsets.UTF_8.displayName()); + break; + + case 13: + api.get().generateDE(SM2dn.getBytes(), 3, 1, orgData); + // byte[] cipherKey = (byte[]) genSM2.get(SydApi.RET_CIPHER_KEY); + sr.setResponseCodeOK(); + // sr.setResponseData(new String(cipherKey), StandardCharsets.UTF_8.displayName()); + break; + + case 14: + api.get().decryptDE(true, 1, SM2dn.getBytes(), sign);; + // byte[] oData = (byte[]) denSM2.get("oData"); + sr.setResponseCodeOK(); + // sr.setResponseData(new String(oData), StandardCharsets.UTF_8.displayName()); + break; + + + case 15: + api.get(). generateDE(RSAdn.getBytes(), 4, 1, orgData); + // byte[] cipherKeyRSA = (byte[]) genRSA.get(SydApi.RET_CIPHER_KEY); + sr.setResponseCodeOK(); + //sr.setResponseData(new String(cipherKeyRSA), StandardCharsets.UTF_8.displayName()); + break; + + case 16: + api.get().decryptDERSA(true, 1, RSAdn.getBytes(), sign); + // byte[] oDataRSA = (byte[]) denRSA.get("oData"); + sr.setResponseCodeOK(); + //sr.setResponseData(new String(oDataRSA), StandardCharsets.UTF_8.displayName()); + break; + + default: + sr.setResponseCodeOK(); + sr.setResponseData("请选择测试组", StandardCharsets.UTF_8.displayName()); + break; + } + sr.setSuccessful(true); + }catch (SydApiException e){ + e.printStackTrace(); + sr.setResponseCode(String.valueOf(e.getRetCode())); + sr.setResponseData(e.getMessage(), StandardCharsets.UTF_8.displayName()); + sr.setSuccessful(false); + }finally { + sr.sampleEnd(); + } + return sr; + } + + /** + * 测试完成后执行,一般用于关闭资源 + * @param context 上下文对象,可用于获取jmeter传递的参数 + */ + @Override + public void teardownTest(JavaSamplerContext context) { + System.runFinalization(); + } +} \ No newline at end of file diff --git a/src/main/java/com/jmeter/test/Test4ZS.java b/src/main/java/com/jmeter/test/Test4ZS.java deleted file mode 100644 index b07b6e5..0000000 --- a/src/main/java/com/jmeter/test/Test4ZS.java +++ /dev/null @@ -1,210 +0,0 @@ -//package com.jmeter.test; -// -//import com.sunyard.RetWrap; -//import com.sunyard.SydApi; -//import com.sunyard.SydApiException; -//import com.sunyard.proto.Util; -//import org.apache.jmeter.config.Arguments; -//import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient; -//import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext; -//import org.apache.jmeter.samplers.SampleResult; -//import racal.sunyard.main.SydApi4j; -//import racal.sunyard.main.SydApiBuilder; -//import sun.nio.cs.StandardCharsets; -// -// -//public class Test4ZS extends AbstractJavaSamplerClient { -// -// private String SM2dn ; -// private String RSAdn ; -// private String ip ; -// private String ip2 ; -// private String oData; -// private String sign; -// private byte[] orgData; -// -// private int type; -// -// -// /** -// * 定义默认的参数,在jmeter中会自动显示在这里定义的默认参数 -// * @return Arguments对象 -// */ -// @Override -// public Arguments getDefaultParameters() { -// Arguments arguments = new Arguments(); -// arguments.addArgument("SM2dn", "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"); -// arguments.addArgument("RSAdn", "C=cn,O=CFCA TEST CA,OU=NCS2,OU=Enterprises,CN=041@Z402451000010@ShanDong@00000001"); -// arguments.addArgument("orgData", "12345678"); -// arguments.addArgument("ip", "172.16.17.161"); -// arguments.addArgument("ip2", "172.16.17.161"); -// arguments.addArgument("type", "1"); -// arguments.addArgument("sign", "12345678"); -// return arguments; -// } -// -// /** -// * 在执行测试之前执行,只执行一次,可以获取传递过来的参数,一般用来做初始化操作 -// * @param context 可以获取jmeter传递过来的参数 -// */ -// @Override -// public void setupTest(JavaSamplerContext context) { -// //对成员变量初始化 -// SM2dn = context.getParameter("SM2dn"); -// RSAdn = context.getParameter("RSAdn"); -// oData = context.getParameter("orgData"); -// ip = context.getParameter("ip"); -// ip2 = context.getParameter("ip2"); -// type = context.getIntParameter("type"); -// sign = context.getParameter("sign"); -// System.setProperty("com.sunyard.dnsort", "false"); -// -// } -// -// /** -// * 真正的测试代码块,jmeter按照配置的逻辑执行该方法 -// * @param javaSamplerContext 上下文对象,可以获取jmeter传递的参数 -// * @return SampleResult对象用于封装结果 -// */ -// @Override -// public SampleResult runTest(JavaSamplerContext javaSamplerContext) { -// SampleResult sr = new SampleResult(); -// //设置标签 -// sr.setSampleLabel("testDemo"); -// //设置开始标志,否则无法统计tps等 -// sr.sampleStart(); -// try { -// SydApi4j.SYD_Set_Parameter_HA(ip, ip2, 8889, 1000); -// SydApi4j api = (SydApi4j) new SydApi4j(); -// orgData = oData.getBytes(); //SM2裸签 -// //执行业务逻辑 -// switch(type){ -// case 1: -// api.SYD_NakedSign(SM2dn, orgData, (byte[])null); -// sr.setResponseCodeOK(); -// //sr.setResponseData(Util.encodeBase64(nakedSign1), StandardCharsets.UTF_8.displayName()); -// break; -// -// -// case 2: -// api.SYD_NakedVerify(SM2dn, Util.decodeBase64(sign), orgData, (byte[])null) ; -// sr.setResponseCodeOK(); -// //sr.setResponseData(String.valueOf(nakedVerify1), StandardCharsets.UTF_8.displayName()); -// break; -// -// case 3: -// //RSA裸签 -// api.SYD_NakedSign(1, RSAdn,orgData,(byte[])null); -// sr.setResponseCodeOK(); -// //sr.setResponseData(Util.encodeBase64(nakedSign2), StandardCharsets.UTF_8.displayName()); -// break; -// -// case 4: -// api.SYD_NakedVerify(1, RSAdn,Util.decodeBase64(sign),orgData ,(byte[])null); -// sr.setResponseCodeOK(); -// //sr.setResponseData(String.valueOf(nakedVerify2), StandardCharsets.UTF_8.displayName()); -// break; -// -// case 5: -// api.detachedSign(1, orgData, SM2dn); -// sr.setResponseCodeOK(); -// //sr.setResponseData(detSign1, StandardCharsets.UTF_8.displayName()); -// break; -// -// case 6: -// api.detachedVerify(1, orgData, sign); -// sr.setResponseCodeOK(); -// //sr.setResponseData(String.valueOf(detV1), StandardCharsets.UTF_8.displayName()); -// break; -// -// case 7: -// api.detachedSign(2,1, orgData, RSAdn); -// sr.setResponseCodeOK(); -// //sr.setResponseData(detSign2, StandardCharsets.UTF_8.displayName()); -// break; -// -// case 8: -// api.detachedVerify(2,2, orgData, sign); -// sr.setResponseCodeOK(); -// //sr.setResponseData(String.valueOf(detV2), StandardCharsets.UTF_8.displayName()); -// break; -// -// case 9: -// api.attachedSignHsm(orgData, SM2dn); -// sr.setResponseCodeOK(); -// //sr.setResponseData(attSign1, StandardCharsets.UTF_8.displayName()); -// break; -// -// case 10: -// api.attachedVerify( sign.getBytes()); -// sr.setResponseCodeOK(); -// // sr.setResponseData(String.valueOf(attV1), StandardCharsets.UTF_8.displayName()); -// break; -// -// case 11: -// api.attachedSignRSAHsm(2, orgData, RSAdn); -// sr.setResponseCodeOK(); -// // sr.setResponseData(attSign2, StandardCharsets.UTF_8.displayName()); -// break; -// -// case 12: -// api.attachedVerifyRSA(2, sign); -// sr.setResponseCodeOK(); -// // sr.setResponseData(String.valueOf(attV2), StandardCharsets.UTF_8.displayName()); -// break; -// -// case 13: -// api.generateDE(SM2dn.getBytes(), 3, 1, orgData); -// // byte[] cipherKey = (byte[]) genSM2.get(SydApi.RET_CIPHER_KEY); -// sr.setResponseCodeOK(); -// // sr.setResponseData(new String(cipherKey), StandardCharsets.UTF_8.displayName()); -// break; -// -// case 14: -// api.decryptDE(true, 1, SM2dn.getBytes(), sign);; -// // byte[] oData = (byte[]) denSM2.get("oData"); -// sr.setResponseCodeOK(); -// // sr.setResponseData(new String(oData), StandardCharsets.UTF_8.displayName()); -// break; -// -// -// case 15: -// api. generateDE(RSAdn.getBytes(), 4, 1, orgData); -// // byte[] cipherKeyRSA = (byte[]) genRSA.get(SydApi.RET_CIPHER_KEY); -// sr.setResponseCodeOK(); -// //sr.setResponseData(new String(cipherKeyRSA), StandardCharsets.UTF_8.displayName()); -// break; -// -// case 16: -// api.decryptDERSA(true, 1, RSAdn.getBytes(), sign); -// // byte[] oDataRSA = (byte[]) denRSA.get("oData"); -// sr.setResponseCodeOK(); -// //sr.setResponseData(new String(oDataRSA), StandardCharsets.UTF_8.displayName()); -// break; -// -// default: -// sr.setResponseCodeOK(); -// sr.setResponseData("请选择测试组", StandardCharsets.UTF_8.displayName()); -// break; -// } -// sr.setSuccessful(true); -// }catch (SydApiException e){ -// e.printStackTrace(); -// sr.setResponseCode(String.valueOf(e.getRetCode())); -// sr.setResponseData(e.getMessage(), StandardCharsets.UTF_8.displayName()); -// sr.setSuccessful(false); -// }finally { -// sr.sampleEnd(); -// } -// return sr; -// } -// -// /** -// * 测试完成后执行,一般用于关闭资源 -// * @param context 上下文对象,可用于获取jmeter传递的参数 -// */ -// @Override -// public void teardownTest(JavaSamplerContext context) { -// System.runFinalization(); -// } -//} \ No newline at end of file diff --git a/src/main/java/racal/sunyard/main/SydApi4j.java b/src/main/java/racal/sunyard/main/SydApi4j.java index 32f3672..d93e030 100644 --- a/src/main/java/racal/sunyard/main/SydApi4j.java +++ b/src/main/java/racal/sunyard/main/SydApi4j.java @@ -1821,22 +1821,24 @@ public class SydApi4j implements SydApi { buff = new byte[bb.position()]; System.arraycopy(bb.array(), 0, buff, 0, buff.length); } - - - println("\n\n发送数据"); + if(debug){ + println("\n\n发送数据"); // print("原始数据: \t"); // println(Arrays.toString(buff)); - print("HEX数据: \t"); - println(Util.bytes2HexString(buff)); - - if (null != builder && builder.isUseEBCDMode()) { - // 对十个字节之后的进行 EBCD 转码 - buff = CoderUtil.ASCIIToEBCDICFIX(buff, 10); - print("EBCD 数据: \t"); + print("HEX数据: \t"); println(Util.bytes2HexString(buff)); + + if (null != builder && builder.isUseEBCDMode()) { + // 对十个字节之后的进行 EBCD 转码 + buff = CoderUtil.ASCIIToEBCDICFIX(buff, 10); + print("EBCD 数据: \t"); + println(Util.bytes2HexString(buff)); + } } - testSocket(); + + + //testSocket(); try { socket.getOutputStream().write(buff); @@ -1918,12 +1920,14 @@ public class SydApi4j implements SydApi { len += 2; - print("H\t"); - println(Integer.toHexString(high)); - print("L\t"); - println(Integer.toHexString(low)); - print("Len\t"); - println(len); + if(debug){ + print("H\t"); + println(Integer.toHexString(high)); + print("L\t"); + println(Integer.toHexString(low)); + print("Len\t"); + println(len); + } ByteBuffer bb = ByteBuffer.allocate(len); @@ -1950,16 +1954,24 @@ public class SydApi4j implements SydApi { } + + if (null != builder && builder.isUseEBCDMode()) { - print("EBCD 数据: \t"); - println(Util.bytes2HexString(bb.array())); +// print("EBCD 数据: \t"); +// println(Util.bytes2HexString(bb.array())); byte[] b = bb.array(); CoderUtil.EBCDICToASCIIFIX(b, 10); } + if(debug){ + print("EBCD 数据: \t"); + println(Util.bytes2HexString(bb.array())); + print("HEX数据: \t"); + println(Util.bytes2HexString(bb.array())); + } - print("HEX数据: \t"); - println(Util.bytes2HexString(bb.array())); +// print("HEX数据: \t"); +// println(Util.bytes2HexString(bb.array())); return bb; } @@ -1971,7 +1983,7 @@ public class SydApi4j implements SydApi { * @buffer 如果出错,需要补发的数据。 */ protected ByteBuffer syncRead(byte[] buffer) { - println("\n\n接收数据"); +// println("\n\n接收数据"); try { // 正常接收 ByteBuffer bb = read(socket); diff --git a/src/test/java/sample/HashTest.java b/src/test/java/sample/HashTest.java index 8800404..ebbb0df 100644 --- a/src/test/java/sample/HashTest.java +++ b/src/test/java/sample/HashTest.java @@ -1,6 +1,7 @@ package sample; import com.sunyard.SydApi; +import com.sunyard.proto.Util; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -40,4 +41,12 @@ public class HashTest { public void sha256(){ api.itHash( 1, new byte[ 5 * 1024 * 1024 ]); } + + + @Test + public void hex(){ + String s = "MEQCICECex9ZSh6PktFDu3rkszxJ++miqXBs5uCJS2VL8lhUAiBgZSLbJAMgrpTpmRL2L/5XsWBHSoFbKI6ToSzDnbPCaQ=="; + System.out.println(Util.bytes2HexString(Util.decodeBase64(s))); + System.out.println(new String(Util.decodeBase64(s))); + } } diff --git a/src/test/java/sample/Sample4ZS.java b/src/test/java/sample/Sample4ZS.java index 1d3316a..54fda1c 100644 --- a/src/test/java/sample/Sample4ZS.java +++ b/src/test/java/sample/Sample4ZS.java @@ -4,6 +4,7 @@ import com.sunyard.RetWrap; import com.sunyard.SydApi; import com.sunyard.SydApiException; import com.sunyard.proto.Util; +import org.junit.Test; import racal.sunyard.main.SydApi4j; import racal.sunyard.main.SydApiBuilder; @@ -23,11 +24,11 @@ public class Sample4ZS { String ip2 = "172.16.17.161"; //主备模式连接 - SydApi4j.SYD_Set_Parameter_HA(ip, ip2, 8889, 1000); - SydApi4j api = (SydApi4j) new SydApi4j(); +// SydApi4j.SYD_Set_Parameter_HA(ip, ip2, 8889, 1000); +// SydApi4j api = (SydApi4j) new SydApi4j(); //设置连接 -// SydApiBuilder builder = new SydApiBuilder().setIp("172.16.17.161"); -// SydApi4j api = (SydApi4j) builder.build(); + SydApiBuilder builder = new SydApiBuilder().setIp("172.16.17.161"); + SydApi4j api = (SydApi4j) builder.build(); try { long startTime = System.currentTimeMillis(); //获取开始时间 // //SM2裸签 @@ -94,4 +95,25 @@ public class Sample4ZS { } + @Test + public void importCert(){ + //调试模式(控制台会打印发送报文) + System.setProperty("com.sunyard.sydapi4j.debug", "true"); + //证书是否反序校验 + //System.setProperty("com.sunyard.dnsort", "false"); + String ip = "172.16.17.1"; + String ip2 = "172.16.17.161"; + + //主备模式连接 + SydApi4j.SYD_Set_Parameter_HA(ip, ip2, 8889, 1000); + SydApi4j api = (SydApi4j) new SydApi4j(); + + //证书导入 + String cert = ""; + api.importCert(cert.getBytes(),null); + + + api.SYD_NakedSign(SM2dn, orgData, (byte[])null); + } + } diff --git a/src/test/java/sample/Test4Nongxin.java b/src/test/java/sample/Test4Nongxin.java index 49fb4f7..4251a75 100644 --- a/src/test/java/sample/Test4Nongxin.java +++ b/src/test/java/sample/Test4Nongxin.java @@ -16,17 +16,22 @@ import java.util.List; public class Test4Nongxin { - private static final String SM2dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"; + private static final String SM2dn = "C=CN,O=Sunyard,OU=8001,CN=8001"; private static final String RSAdn = "C=cn,O=CFCA TEST CA,OU=NCS2,OU=Enterprises,CN=041@Z402451000010@ShanDong@00000001"; - private static final byte[] orgData = new byte[ 10*1024 ]; + private static final byte[] orgData = new byte[ 2*1024 ]; private static final byte[] orgDataBig = new byte[ 10*1024 ]; public static void main(String[] args) { //System.setProperty("com.sunyard.sydapi4j.debug", "true"); //设置连接 - SydApiBuilder builder = new SydApiBuilder().setIp("172.16.17.161"); + SydApiBuilder builder = new SydApiBuilder().setIp("192.168.0.200"); SydApi4j api = (SydApi4j) builder.build(); try { //SM2裸签 + byte[] nakedSign = api.SYD_NakedSign(SM2dn, orgData, null); + boolean b1 = api.SYD_NakedVerify(SM2dn, nakedSign, orgData, null); + System.out.println(b1); + + byte[] nakedSign1 = api.SYD_NakedSignAll(4,orgData, SM2dn); System.out.println("SM2大数据裸签:"+ Util.bytes2HexString(nakedSign1)); boolean nakedVerify1 = api.SYD_NakedVerifyAll(4,orgData, nakedSign1, SM2dn);