This commit is contained in:
yihzhou 2023-09-18 10:49:04 +08:00
parent 6f833730c2
commit 9af716e87d
6 changed files with 655 additions and 641 deletions

10
pom.xml
View File

@ -14,8 +14,8 @@
<vertx>3.4.2</vertx> <vertx>3.4.2</vertx>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.encoding>UTF-8</maven.compiler.encoding> <maven.compiler.encoding>UTF-8</maven.compiler.encoding>
<maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.source>1.6</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.target>1.6</maven.compiler.target>
</properties> </properties>
<dependencies> <dependencies>
@ -78,7 +78,7 @@
<dependency> <dependency>
<groupId>com.sunyard</groupId> <groupId>com.sunyard</groupId>
<artifactId>proto</artifactId> <artifactId>proto</artifactId>
<version>1.0.20221215</version> <version>1.1.20221215</version>
</dependency> </dependency>
<dependency> <dependency>
@ -149,8 +149,8 @@
</execution> </execution>
</executions> </executions>
<configuration> <configuration>
<source>7</source> <source>6</source>
<target>7</target> <target>6</target>
<compilerId>groovy-eclipse-compiler</compilerId> <compilerId>groovy-eclipse-compiler</compilerId>
<verbose>true</verbose> <verbose>true</verbose>
<fork>true</fork> <fork>true</fork>

View File

@ -1,210 +1,210 @@
package com.jmeter.test; //package com.jmeter.test;
//
import com.sunyard.RetWrap; //import com.sunyard.RetWrap;
import com.sunyard.SydApi; //import com.sunyard.SydApi;
import com.sunyard.SydApiException; //import com.sunyard.SydApiException;
import com.sunyard.proto.Util; //import com.sunyard.proto.Util;
import org.apache.jmeter.config.Arguments; //import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient; //import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext; //import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult; //import org.apache.jmeter.samplers.SampleResult;
import racal.sunyard.main.SydApi4j; //import racal.sunyard.main.SydApi4j;
import racal.sunyard.main.SydApiBuilder; //import racal.sunyard.main.SydApiBuilder;
//import sun.nio.cs.StandardCharsets;
import java.nio.charset.StandardCharsets; //
//
public class Test4ZS extends AbstractJavaSamplerClient { //public class Test4ZS extends AbstractJavaSamplerClient {
//
private String SM2dn ; // private String SM2dn ;
private String RSAdn ; // private String RSAdn ;
private String ip ; // private String ip ;
private String ip2 ; // private String ip2 ;
private String oData; // private String oData;
private String sign; // private String sign;
private byte[] orgData; // private byte[] orgData;
//
private int type; // private int type;
//
//
/** // /**
* 定义默认的参数在jmeter中会自动显示在这里定义的默认参数 // * 定义默认的参数在jmeter中会自动显示在这里定义的默认参数
* @return Arguments对象 // * @return Arguments对象
*/ // */
@Override // @Override
public Arguments getDefaultParameters() { // public Arguments getDefaultParameters() {
Arguments arguments = new Arguments(); // Arguments arguments = new Arguments();
arguments.addArgument("SM2dn", "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"); // 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("RSAdn", "C=cn,O=CFCA TEST CA,OU=NCS2,OU=Enterprises,CN=041@Z402451000010@ShanDong@00000001");
arguments.addArgument("orgData", "12345678"); // arguments.addArgument("orgData", "12345678");
arguments.addArgument("ip", "172.16.17.161"); // arguments.addArgument("ip", "172.16.17.161");
arguments.addArgument("ip2", "172.16.17.161"); // arguments.addArgument("ip2", "172.16.17.161");
arguments.addArgument("type", "1"); // arguments.addArgument("type", "1");
arguments.addArgument("sign", "12345678"); // arguments.addArgument("sign", "12345678");
return arguments; // return arguments;
} // }
//
/** // /**
* 在执行测试之前执行只执行一次可以获取传递过来的参数一般用来做初始化操作 // * 在执行测试之前执行只执行一次可以获取传递过来的参数一般用来做初始化操作
* @param context 可以获取jmeter传递过来的参数 // * @param context 可以获取jmeter传递过来的参数
*/ // */
@Override // @Override
public void setupTest(JavaSamplerContext context) { // public void setupTest(JavaSamplerContext context) {
//对成员变量初始化 // //对成员变量初始化
SM2dn = context.getParameter("SM2dn"); // SM2dn = context.getParameter("SM2dn");
RSAdn = context.getParameter("RSAdn"); // RSAdn = context.getParameter("RSAdn");
oData = context.getParameter("orgData"); // oData = context.getParameter("orgData");
ip = context.getParameter("ip"); // ip = context.getParameter("ip");
ip2 = context.getParameter("ip2"); // ip2 = context.getParameter("ip2");
type = context.getIntParameter("type"); // type = context.getIntParameter("type");
sign = context.getParameter("sign"); // sign = context.getParameter("sign");
System.setProperty("com.sunyard.dnsort", "false"); // System.setProperty("com.sunyard.dnsort", "false");
//
} // }
//
/** // /**
* 真正的测试代码块jmeter按照配置的逻辑执行该方法 // * 真正的测试代码块jmeter按照配置的逻辑执行该方法
* @param javaSamplerContext 上下文对象可以获取jmeter传递的参数 // * @param javaSamplerContext 上下文对象可以获取jmeter传递的参数
* @return SampleResult对象用于封装结果 // * @return SampleResult对象用于封装结果
*/ // */
@Override // @Override
public SampleResult runTest(JavaSamplerContext javaSamplerContext) { // public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
SampleResult sr = new SampleResult(); // SampleResult sr = new SampleResult();
//设置标签 // //设置标签
sr.setSampleLabel("testDemo"); // sr.setSampleLabel("testDemo");
//设置开始标志否则无法统计tps等 // //设置开始标志否则无法统计tps等
sr.sampleStart(); // sr.sampleStart();
try { // try {
SydApi4j.SYD_Set_Parameter_HA(ip, ip2, 8889, 1000); // SydApi4j.SYD_Set_Parameter_HA(ip, ip2, 8889, 1000);
SydApi4j api = (SydApi4j) new SydApi4j(); // SydApi4j api = (SydApi4j) new SydApi4j();
orgData = oData.getBytes(); //SM2裸签 // orgData = oData.getBytes(); //SM2裸签
//执行业务逻辑 // //执行业务逻辑
switch(type){ // switch(type){
case 1: // case 1:
api.SYD_NakedSign(SM2dn, orgData, (byte[])null); // api.SYD_NakedSign(SM2dn, orgData, (byte[])null);
sr.setResponseCodeOK(); // sr.setResponseCodeOK();
//sr.setResponseData(Util.encodeBase64(nakedSign1), StandardCharsets.UTF_8.displayName()); // //sr.setResponseData(Util.encodeBase64(nakedSign1), StandardCharsets.UTF_8.displayName());
break; // break;
//
//
case 2: // case 2:
api.SYD_NakedVerify(SM2dn, Util.decodeBase64(sign), orgData, (byte[])null) ; // api.SYD_NakedVerify(SM2dn, Util.decodeBase64(sign), orgData, (byte[])null) ;
sr.setResponseCodeOK(); // sr.setResponseCodeOK();
//sr.setResponseData(String.valueOf(nakedVerify1), StandardCharsets.UTF_8.displayName()); // //sr.setResponseData(String.valueOf(nakedVerify1), StandardCharsets.UTF_8.displayName());
break; // break;
//
case 3: // case 3:
//RSA裸签 // //RSA裸签
api.SYD_NakedSign(1, RSAdn,orgData,(byte[])null); // api.SYD_NakedSign(1, RSAdn,orgData,(byte[])null);
sr.setResponseCodeOK(); // sr.setResponseCodeOK();
//sr.setResponseData(Util.encodeBase64(nakedSign2), StandardCharsets.UTF_8.displayName()); // //sr.setResponseData(Util.encodeBase64(nakedSign2), StandardCharsets.UTF_8.displayName());
break; // break;
//
case 4: // case 4:
api.SYD_NakedVerify(1, RSAdn,Util.decodeBase64(sign),orgData ,(byte[])null); // api.SYD_NakedVerify(1, RSAdn,Util.decodeBase64(sign),orgData ,(byte[])null);
sr.setResponseCodeOK(); // sr.setResponseCodeOK();
//sr.setResponseData(String.valueOf(nakedVerify2), StandardCharsets.UTF_8.displayName()); // //sr.setResponseData(String.valueOf(nakedVerify2), StandardCharsets.UTF_8.displayName());
break; // break;
//
case 5: // case 5:
api.detachedSign(1, orgData, SM2dn); // api.detachedSign(1, orgData, SM2dn);
sr.setResponseCodeOK(); // sr.setResponseCodeOK();
//sr.setResponseData(detSign1, StandardCharsets.UTF_8.displayName()); // //sr.setResponseData(detSign1, StandardCharsets.UTF_8.displayName());
break; // break;
//
case 6: // case 6:
api.detachedVerify(1, orgData, sign); // api.detachedVerify(1, orgData, sign);
sr.setResponseCodeOK(); // sr.setResponseCodeOK();
//sr.setResponseData(String.valueOf(detV1), StandardCharsets.UTF_8.displayName()); // //sr.setResponseData(String.valueOf(detV1), StandardCharsets.UTF_8.displayName());
break; // break;
//
case 7: // case 7:
api.detachedSign(2,1, orgData, RSAdn); // api.detachedSign(2,1, orgData, RSAdn);
sr.setResponseCodeOK(); // sr.setResponseCodeOK();
//sr.setResponseData(detSign2, StandardCharsets.UTF_8.displayName()); // //sr.setResponseData(detSign2, StandardCharsets.UTF_8.displayName());
break; // break;
//
case 8: // case 8:
api.detachedVerify(2,2, orgData, sign); // api.detachedVerify(2,2, orgData, sign);
sr.setResponseCodeOK(); // sr.setResponseCodeOK();
//sr.setResponseData(String.valueOf(detV2), StandardCharsets.UTF_8.displayName()); // //sr.setResponseData(String.valueOf(detV2), StandardCharsets.UTF_8.displayName());
break; // break;
//
case 9: // case 9:
api.attachedSignHsm(orgData, SM2dn); // api.attachedSignHsm(orgData, SM2dn);
sr.setResponseCodeOK(); // sr.setResponseCodeOK();
//sr.setResponseData(attSign1, StandardCharsets.UTF_8.displayName()); // //sr.setResponseData(attSign1, StandardCharsets.UTF_8.displayName());
break; // break;
//
case 10: // case 10:
api.attachedVerify( sign.getBytes()); // api.attachedVerify( sign.getBytes());
sr.setResponseCodeOK(); // sr.setResponseCodeOK();
// sr.setResponseData(String.valueOf(attV1), StandardCharsets.UTF_8.displayName()); // // sr.setResponseData(String.valueOf(attV1), StandardCharsets.UTF_8.displayName());
break; // break;
//
case 11: // case 11:
api.attachedSignRSAHsm(2, orgData, RSAdn); // api.attachedSignRSAHsm(2, orgData, RSAdn);
sr.setResponseCodeOK(); // sr.setResponseCodeOK();
// sr.setResponseData(attSign2, StandardCharsets.UTF_8.displayName()); // // sr.setResponseData(attSign2, StandardCharsets.UTF_8.displayName());
break; // break;
//
case 12: // case 12:
api.attachedVerifyRSA(2, sign); // api.attachedVerifyRSA(2, sign);
sr.setResponseCodeOK(); // sr.setResponseCodeOK();
// sr.setResponseData(String.valueOf(attV2), StandardCharsets.UTF_8.displayName()); // // sr.setResponseData(String.valueOf(attV2), StandardCharsets.UTF_8.displayName());
break; // break;
//
case 13: // case 13:
api.generateDE(SM2dn.getBytes(), 3, 1, orgData); // api.generateDE(SM2dn.getBytes(), 3, 1, orgData);
// byte[] cipherKey = (byte[]) genSM2.get(SydApi.RET_CIPHER_KEY); // // byte[] cipherKey = (byte[]) genSM2.get(SydApi.RET_CIPHER_KEY);
sr.setResponseCodeOK(); // sr.setResponseCodeOK();
// sr.setResponseData(new String(cipherKey), StandardCharsets.UTF_8.displayName()); // // sr.setResponseData(new String(cipherKey), StandardCharsets.UTF_8.displayName());
break; // break;
//
case 14: // case 14:
api.decryptDE(true, 1, SM2dn.getBytes(), sign);; // api.decryptDE(true, 1, SM2dn.getBytes(), sign);;
// byte[] oData = (byte[]) denSM2.get("oData"); // // byte[] oData = (byte[]) denSM2.get("oData");
sr.setResponseCodeOK(); // sr.setResponseCodeOK();
// sr.setResponseData(new String(oData), StandardCharsets.UTF_8.displayName()); // // sr.setResponseData(new String(oData), StandardCharsets.UTF_8.displayName());
break; // break;
//
//
case 15: // case 15:
api. generateDE(RSAdn.getBytes(), 4, 1, orgData); // api. generateDE(RSAdn.getBytes(), 4, 1, orgData);
// byte[] cipherKeyRSA = (byte[]) genRSA.get(SydApi.RET_CIPHER_KEY); // // byte[] cipherKeyRSA = (byte[]) genRSA.get(SydApi.RET_CIPHER_KEY);
sr.setResponseCodeOK(); // sr.setResponseCodeOK();
//sr.setResponseData(new String(cipherKeyRSA), StandardCharsets.UTF_8.displayName()); // //sr.setResponseData(new String(cipherKeyRSA), StandardCharsets.UTF_8.displayName());
break; // break;
//
case 16: // case 16:
api.decryptDERSA(true, 1, RSAdn.getBytes(), sign); // api.decryptDERSA(true, 1, RSAdn.getBytes(), sign);
// byte[] oDataRSA = (byte[]) denRSA.get("oData"); // // byte[] oDataRSA = (byte[]) denRSA.get("oData");
sr.setResponseCodeOK(); // sr.setResponseCodeOK();
//sr.setResponseData(new String(oDataRSA), StandardCharsets.UTF_8.displayName()); // //sr.setResponseData(new String(oDataRSA), StandardCharsets.UTF_8.displayName());
break; // break;
//
default: // default:
sr.setResponseCodeOK(); // sr.setResponseCodeOK();
sr.setResponseData("请选择测试组", StandardCharsets.UTF_8.displayName()); // sr.setResponseData("请选择测试组", StandardCharsets.UTF_8.displayName());
break; // break;
} // }
sr.setSuccessful(true); // sr.setSuccessful(true);
}catch (SydApiException e){ // }catch (SydApiException e){
e.printStackTrace(); // e.printStackTrace();
sr.setResponseCode(String.valueOf(e.getRetCode())); // sr.setResponseCode(String.valueOf(e.getRetCode()));
sr.setResponseData(e.getMessage(), StandardCharsets.UTF_8.displayName()); // sr.setResponseData(e.getMessage(), StandardCharsets.UTF_8.displayName());
sr.setSuccessful(false); // sr.setSuccessful(false);
}finally { // }finally {
sr.sampleEnd(); // sr.sampleEnd();
} // }
return sr; // return sr;
} // }
//
/** // /**
* 测试完成后执行一般用于关闭资源 // * 测试完成后执行一般用于关闭资源
* @param context 上下文对象可用于获取jmeter传递的参数 // * @param context 上下文对象可用于获取jmeter传递的参数
*/ // */
@Override // @Override
public void teardownTest(JavaSamplerContext context) { // public void teardownTest(JavaSamplerContext context) {
System.runFinalization(); // System.runFinalization();
} // }
} //}

View File

@ -1,297 +1,297 @@
package com.sunyard.sydapi.test; //package com.sunyard.sydapi.test;
//
import com.sunyard.RetWrap; //import com.sunyard.RetWrap;
import com.sunyard.SydApi; //import com.sunyard.SydApi;
import com.sunyard.cert.X509; //import com.sunyard.cert.X509;
import com.sunyard.proto.Util; //import com.sunyard.proto.Util;
import org.junit.After; //import org.junit.After;
import org.junit.Before; //import org.junit.Before;
import org.junit.Test; //import org.junit.Test;
import racal.sunyard.main.SydApi4j; //import racal.sunyard.main.SydApi4j;
//
import java.io.IOException; //import java.io.IOException;
import java.util.Base64; //import java.util.Base64;
//
import static com.sunyard.sydapi.util.PrintUtil.printRetWrap; //import static com.sunyard.sydapi.util.PrintUtil.printRetWrap;
//
/** ///**
* 甘肃银行数字货币 // * 甘肃银行数字货币
*/ // */
public class TestGSYH { //public class TestGSYH {
//
SydApi4j api; // SydApi4j api;
// 对方加密证书sn // // 对方加密证书sn
String sn = "1004282452"; // String sn = "1004282452";
// 自己签名证书sn // // 自己签名证书sn
String sn1 = "1004282451"; // String sn1 = "1004282451";
//
@Before // @Before
public void before() { // public void before() {
// 通过设置debug的属性开启debug如果不设置则默认不打开 // // 通过设置debug的属性开启debug如果不设置则默认不打开
System.setProperty("com.sunyard.sydapi4j.debug", "true"); // System.setProperty("com.sunyard.sydapi4j.debug", "true");
api = (SydApi4j) new SydApi4j().connect("61.164.40.82", 8889, null, 1000); // api = (SydApi4j) new SydApi4j().connect("61.164.40.82", 8889, null, 1000);
//
} // }
//
@After // @After
public void after() { // public void after() {
try { // try {
this.api.disconnect(); // this.api.disconnect();
} catch (Exception e) { // } catch (Exception e) {
e.printStackTrace(); // e.printStackTrace();
} // }
} // }
//
@Test // @Test
public void test02() { // public void test02() {
Base64.Encoder encoder = Base64.getEncoder(); // Base64.Encoder encoder = Base64.getEncoder();
Base64.Decoder decoder = Base64.getDecoder(); // Base64.Decoder decoder = Base64.getDecoder();
//
// 2. // // 2.
String data = "1111111111111111"; // String data = "1111111111111111";
// 随机生成对称密钥由指定的公钥加密生成数字信封 // // 随机生成对称密钥由指定的公钥加密生成数字信封
RetWrap retWrap = api.generateDEbyGS(sn, SydApi.ALG_SM4); // RetWrap retWrap = api.generateDEbyGS(sn, SydApi.ALG_SM4);
String sessionKey = (String) retWrap.get(SydApi.RET_SESSION_KEY); // String sessionKey = (String) retWrap.get(SydApi.RET_SESSION_KEY);
//
// sm4加密账号等数据 // // sm4加密账号等数据
byte[] dataEnc = api.SYMEncryptData(SydApi.NALG_SM4, sessionKey, data.getBytes()); // byte[] dataEnc = api.SYMEncryptData(SydApi.NALG_SM4, sessionKey, data.getBytes());
// base64转码 // // base64转码
byte[] dataEncBs64 = encoder.encode(dataEnc); // byte[] dataEncBs64 = encoder.encode(dataEnc);
//
System.out.println("dataEncBs64: " + Util.bytes2HexString(dataEncBs64)); // System.out.println("dataEncBs64: " + Util.bytes2HexString(dataEncBs64));
//
// 将sm2加密后的数据进行base64转码 // // 将sm2加密后的数据进行base64转码
String cipherKey = (String) retWrap.get(SydApi.RET_CIPHER_KEY); // String cipherKey = (String) retWrap.get(SydApi.RET_CIPHER_KEY);
byte[] cipherKeyBs64 = encoder.encode(cipherKey.getBytes()); // byte[] cipherKeyBs64 = encoder.encode(cipherKey.getBytes());
//
// 3. // // 3.
// 报文正文 // // 报文正文
String msg = "12313146464564"; // String msg = "12313146464564";
// 对报文正文签名内部会计算hash // // 对报文正文签名内部会计算hash
String msgSign = api.netGSSign(sn1, msg.getBytes()); // String msgSign = api.netGSSign(sn1, msg.getBytes());
// base64转码 // // base64转码
byte[] msgSignBs64 = encoder.encode(msgSign.getBytes()); // byte[] msgSignBs64 = encoder.encode(msgSign.getBytes());
//
//
// -------------下面为城银清算步骤----------------- // // -------------下面为城银清算步骤-----------------
// 7. // // 7.
// base64解码 // // base64解码
byte[] msgSignB = decoder.decode(msgSignBs64); // byte[] msgSignB = decoder.decode(msgSignBs64);
// 对报文验签 // // 对报文验签
boolean b = api.netGSVerify(sn1, msg.getBytes(), new String(msgSignB)); // boolean b = api.netGSVerify(sn1, msg.getBytes(), new String(msgSignB));
System.out.println("验签结果: " + b); // System.out.println("验签结果: " + b);
//
// 8. // // 8.
byte[] cipherKeyB = decoder.decode(cipherKeyBs64); // byte[] cipherKeyB = decoder.decode(cipherKeyBs64);
// 解密数字信封获取对称密钥 // // 解密数字信封获取对称密钥
RetWrap retWrap1 = api.decryptDE(sn, new String(cipherKeyB)); // RetWrap retWrap1 = api.decryptDE(sn, new String(cipherKeyB));
sessionKey = (String) retWrap1.get(SydApi.RET_SESSION_KEY); // sessionKey = (String) retWrap1.get(SydApi.RET_SESSION_KEY);
//
// 9. // // 9.
// 使用对称密钥解密报文 // // 使用对称密钥解密报文
dataEnc = decoder.decode(dataEncBs64); // dataEnc = decoder.decode(dataEncBs64);
byte[] bytes1 = api.SYMDecryptData(SydApi.NALG_SM4, sessionKey, dataEnc); // byte[] bytes1 = api.SYMDecryptData(SydApi.NALG_SM4, sessionKey, dataEnc);
System.out.println("data: " + new String(bytes1)); // System.out.println("data: " + new String(bytes1));
} // }
//
// 测试通过 // // 测试通过
// 8017 // // 8017
@Test // @Test
public void testGetX509CertFileBySN() { // public void testGetX509CertFileBySN() {
String sn2 = "3C93000000000025"; // String sn2 = "3C93000000000025";
//
/** // /**
* 通过证书序号 sn 获取的 X509 证书文件 // * 通过证书序号 sn 获取的 X509 证书文件
* @param sn sn证书序号 // * @param sn sn证书序号
* @param nCertType 证书类型0:签名证书, 1:加密证书 // * @param nCertType 证书类型0:签名证书, 1:加密证书
* @return base64 编码的证书 // * @return base64 编码的证书
*/ // */
String s = api.GetX509CertFileBySN(sn2, SydApi.FOR_SIGN); // String s = api.GetX509CertFileBySN(sn2, SydApi.FOR_SIGN);
System.out.println(s); // System.out.println(s);
//
/** // /**
* 输入 X509 格式的证书获取证书信息 // * 输入 X509 格式的证书获取证书信息
* @param pCert base64 编码的证书 // * @param pCert base64 编码的证书
* @return 证书信息类 // * @return 证书信息类
* 证书信息类包含颁发者DN 证书序列号 证书主题证书有效期的起始时间证书有效期的终止时间DER编码的公钥 // * 证书信息类包含颁发者DN 证书序列号 证书主题证书有效期的起始时间证书有效期的终止时间DER编码的公钥
*/ // */
X509 x509 = api.GetX509CertInfo(s); // X509 x509 = api.GetX509CertInfo(s);
System.out.println("证书主题DN: " + x509.getSubject()); // System.out.println("证书主题DN: " + x509.getSubject());
} // }
//
//
@Test // @Test
public void testimportCertAddHT() { // public void testimportCertAddHT() {
String cert1 = "MIIB4TCCAYSgAwIBAgIIPJMAAAAAACswDAYIKoEcz1UBg3UFADAmMQswCQYDVQQGEwJDTjEXMBUGA1UEAwwOU3VueWFyZFNNMlJvb3QwHhcNMTcxMTE3MDIzMDUxWhcNMjMwMTI1MDIzMDUxWjBZMQswCQYDVQQGEwJDTjELMAkGA1UECAwCWkoxCzAJBgNVBAcMAkhaMQ4wDAYDVQQKDAVISkpZUzERMA8GA1UECwwIMDAwMDAwMDAxDTALBgNVBAMMBDIyMjIwWTATBgcqhkjOPQIBBggqgRzPVQGCLQNCAATxqegqlmc/lduzBaKREyeNuPf78RA3wfJuhAv8zymLwQ6doefs1Iul+kMOukhfwY9aEhVdqws34FZMm2vs1+wXo2cwZTAOBgNVHQ8BAf8EBAMCAMAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwHwYDVR0jBBgwFoAU93/arv8hxtk6eq2g+6z+AqVO1cEwHQYDVR0OBBYEFHfjFl72707A6s+YVuGvEuyvFWTMMAwGCCqBHM9VAYN1BQADSQAwRgIhALzg7+QW7RU4phv+4arEv0IOeaA6dtR8VT4Bwin9oHTWAiEA9kLESGiYm8L5Htf7GBXgH+pk7BJ68clml41B/ejZglI="; // String cert1 = "MIIB4TCCAYSgAwIBAgIIPJMAAAAAACswDAYIKoEcz1UBg3UFADAmMQswCQYDVQQGEwJDTjEXMBUGA1UEAwwOU3VueWFyZFNNMlJvb3QwHhcNMTcxMTE3MDIzMDUxWhcNMjMwMTI1MDIzMDUxWjBZMQswCQYDVQQGEwJDTjELMAkGA1UECAwCWkoxCzAJBgNVBAcMAkhaMQ4wDAYDVQQKDAVISkpZUzERMA8GA1UECwwIMDAwMDAwMDAxDTALBgNVBAMMBDIyMjIwWTATBgcqhkjOPQIBBggqgRzPVQGCLQNCAATxqegqlmc/lduzBaKREyeNuPf78RA3wfJuhAv8zymLwQ6doefs1Iul+kMOukhfwY9aEhVdqws34FZMm2vs1+wXo2cwZTAOBgNVHQ8BAf8EBAMCAMAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwHwYDVR0jBBgwFoAU93/arv8hxtk6eq2g+6z+AqVO1cEwHQYDVR0OBBYEFHfjFl72707A6s+YVuGvEuyvFWTMMAwGCCqBHM9VAYN1BQADSQAwRgIhALzg7+QW7RU4phv+4arEv0IOeaA6dtR8VT4Bwin9oHTWAiEA9kLESGiYm8L5Htf7GBXgH+pk7BJ68clml41B/ejZglI=";
//
String jgh = "00000000"; // String jgh = "00000000";
//
/** // /**
* 上传指定证书到加密设备,并在证书前后加上begin和end // * 上传指定证书到加密设备,并在证书前后加上begin和end
* @param certData 证书的字节数组 // * @param certData 证书的字节数组
* @param organizationId 机构号的字节数组 // * @param organizationId 机构号的字节数组
* @return // * @return
*/ // */
RetWrap retWrap = api.importCertAddHT(cert1, jgh.getBytes()); // RetWrap retWrap = api.importCertAddHT(cert1, jgh.getBytes());
System.out.println(retWrap); // System.out.println(retWrap);
} // }
//
// 8012 // // 8012
@Test // @Test
public void testSYD_Get_X509_CertInfo_HA1() { // public void testSYD_Get_X509_CertInfo_HA1() {
//
String orgData = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + // String orgData = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<Document xmlns=\"urn:cbcc:std:dcep:2020:tech:xsd:ccms.903.001.02\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n" + // "<Document xmlns=\"urn:cbcc:std:dcep:2020:tech:xsd:ccms.903.001.02\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n" +
" <CertNtfctn>\n" + // " <CertNtfctn>\n" +
" <GrpHdr>\n" + // " <GrpHdr>\n" +
" <MsgId>20211230001190300000000032001000</MsgId>\n" + // " <MsgId>20211230001190300000000032001000</MsgId>\n" +
" <CreDtTm>2021-12-30T09:27:49</CreDtTm>\n" + // " <CreDtTm>2021-12-30T09:27:49</CreDtTm>\n" +
" <InstgPty>\n" + // " <InstgPty>\n" +
" <InstgDrctPty>G4000131000016</InstgDrctPty>\n" + // " <InstgDrctPty>G4000131000016</InstgDrctPty>\n" +
" </InstgPty>\n" + // " </InstgPty>\n" +
" <InstdPty>\n" + // " <InstdPty>\n" +
" <InstdDrctPty>C1175662000017</InstdDrctPty>\n" + // " <InstdDrctPty>C1175662000017</InstdDrctPty>\n" +
" </InstdPty>\n" + // " </InstdPty>\n" +
" </GrpHdr>\n" + // " </GrpHdr>\n" +
" <CertNtfctnInf>\n" + // " <CertNtfctnInf>\n" +
" <ChgTp>CC00</ChgTp>\n" + // " <ChgTp>CC00</ChgTp>\n" +
" <CertTp>CS01</CertTp>\n" + // " <CertTp>CS01</CertTp>\n" +
" </CertNtfctnInf>\n" + // " </CertNtfctnInf>\n" +
" </CertNtfctn>\n" + // " </CertNtfctn>\n" +
"</Document>"; // "</Document>";
//
String sign = "MIID3QYKKoEcz1UGAQQCAqCCA80wggPJAgEBMQ4wDAYIKoEcz1UBgxEFADAMBgoqgRzPVQYBBAIBoIICxDCCAsAwggJjoAMCAQICEBAAAAAAAAAAAAAAEEJYBCMwDAYIKoEcz1UBg3UFADBcMQswCQYDVQQGEwJDTjEwMC4GA1" + // String sign = "MIID3QYKKoEcz1UGAQQCAqCCA80wggPJAgEBMQ4wDAYIKoEcz1UBgxEFADAMBgoqgRzPVQYBBAIBoIICxDCCAsAwggJjoAMCAQICEBAAAAAAAAAAAAAAEEJYBCMwDAYIKoEcz1UBg3UFADBcMQswCQYDVQQGEwJDTjEwMC4GA1" +
"UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRswGQYDVQQDDBJDRkNBIFRFU1QgU00yIE9DQTEwHhcNMjEwMTExMDk1MjI1WhcNMjIwMTExMDk1MjI1WjB2MQswCQYDVQQGEwJjbjEVMBMGA1UECgwMQ0ZDQSBURVNUIENBMQ8wDQYDVQQLDAZDQ0ZDQ0IxF" + // "UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRswGQYDVQQDDBJDRkNBIFRFU1QgU00yIE9DQTEwHhcNMjEwMTExMDk1MjI1WhcNMjIwMTExMDk1MjI1WjB2MQswCQYDVQQGEwJjbjEVMBMGA1UECgwMQ0ZDQSBURVNUIENBMQ8wDQYDVQQLDAZDQ0ZDQ0IxF" +
"DASBgNVBAsMC0VudGVycHJpc2VzMSkwJwYDVQQDDCAwNDFAODkwNDI5MDA5OTk5RkRAQ0JDQ0AwMDAwMDAwMTBZMBMGByqGSM49AgEGCCqBHM9VAYItA0IABExU5zuJ3pVl49mS3rTBwUcPuiI/zDR/w117PkpCgJ7m0kGyyorj1h2bxM62PthpNy99KPnk9gEvS696ZE5s8LGjgeowgecw" + // "DASBgNVBAsMC0VudGVycHJpc2VzMSkwJwYDVQQDDCAwNDFAODkwNDI5MDA5OTk5RkRAQ0JDQ0AwMDAwMDAwMTBZMBMGByqGSM49AgEGCCqBHM9VAYItA0IABExU5zuJ3pVl49mS3rTBwUcPuiI/zDR/w117PkpCgJ7m0kGyyorj1h2bxM62PthpNy99KPnk9gEvS696ZE5s8LGjgeowgecw" +
"HwYDVR0jBBgwFoAUa/4Y2o9COqa4bbMuiIM6NKLBMOEwSAYDVR0gBEEwPzA9BghggRyG7yoBATAxMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmNmY2EuY29tLmNuL3VzL3VzLTE0Lmh0bTA5BgNVHR8EMjAwMC6gLKAqhihodHRwOi8vdWNybC5jZmNhLmNvbS5jbi9TTTIvY3JsMTY4NzY" + // "HwYDVR0jBBgwFoAUa/4Y2o9COqa4bbMuiIM6NKLBMOEwSAYDVR0gBEEwPzA9BghggRyG7yoBATAxMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmNmY2EuY29tLmNuL3VzL3VzLTE0Lmh0bTA5BgNVHR8EMjAwMC6gLKAqhihodHRwOi8vdWNybC5jZmNhLmNvbS5jbi9TTTIvY3JsMTY4NzY" +
"uY3JsMAsGA1UdDwQEAwID6DAdBgNVHQ4EFgQUypxjmN7VBcoruhBRWmmFNv9yG1IwEwYDVR0lBAwwCgYIKwYBBQUHAwIwDAYIKoEcz1UBg3UFAANJADBGAiEA1IQTRQf5aaDJzzVxWLRml1ZSqQd9FPFeKZJnbzGQIQMCIQD/gY5+H1nytcVAx8hGtUPssklmI+9+vTdOF5LaKMR+jzGB3T" + // "uY3JsMAsGA1UdDwQEAwID6DAdBgNVHQ4EFgQUypxjmN7VBcoruhBRWmmFNv9yG1IwEwYDVR0lBAwwCgYIKwYBBQUHAwIwDAYIKoEcz1UBg3UFAANJADBGAiEA1IQTRQf5aaDJzzVxWLRml1ZSqQd9FPFeKZJnbzGQIQMCIQD/gY5+H1nytcVAx8hGtUPssklmI+9+vTdOF5LaKMR+jzGB3T" +
"CB2gIBATBwMFwxCzAJBgNVBAYTAkNOMTAwLgYDVQQKDCdDaGluYSBGaW5hbmNpYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGzAZBgNVBAMMEkNGQ0EgVEVTVCBTTTIgT0NBMQIQEAAAAAAAAAAAAAAQQlgEIzAMBggqgRzPVQGDEQUAMA0GCSqBHM9VAYItAQUABEYwRAIgXmjY/FIR8" + // "CB2gIBATBwMFwxCzAJBgNVBAYTAkNOMTAwLgYDVQQKDCdDaGluYSBGaW5hbmNpYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGzAZBgNVBAMMEkNGQ0EgVEVTVCBTTTIgT0NBMQIQEAAAAAAAAAAAAAAQQlgEIzAMBggqgRzPVQGDEQUAMA0GCSqBHM9VAYItAQUABEYwRAIgXmjY/FIR8" +
"qudmZGsIQUivZDt3/73dGojVjj5L76OcJICIAHu0G242uYPY2B8zMkGw7kQ1C1xgRipEmlC1GWwMCz0"; // "qudmZGsIQUivZDt3/73dGojVjj5L76OcJICIAHu0G242uYPY2B8zMkGw7kQ1C1xgRipEmlC1GWwMCz0";
//
/** // /**
* 验签并从签名中获取证书并上载到加密机 // * 验签并从签名中获取证书并上载到加密机
* @param orgData 待签名的原始数据 // * @param orgData 待签名的原始数据
* @param sign 签名数据 // * @param sign 签名数据
* @return 证书信息包含公钥字段 // * @return 证书信息包含公钥字段
*/ // */
X509 x509 = api.SYD_Get_X509_CertInfo_HA(orgData.getBytes(), sign); // X509 x509 = api.SYD_Get_X509_CertInfo_HA(orgData.getBytes(), sign);
System.out.println("证书公钥: " + Util.bytes2HexString(x509.getPubKey())); // System.out.println("证书公钥: " + Util.bytes2HexString(x509.getPubKey()));
} // }
//
//
// 测试通过 // // 测试通过
// 78 // // 78
@Test // @Test
public void testSM2DecryptC() { // public void testSM2DecryptC() {
String certId = "1111111111111151"; // String certId = "1111111111111151";
String publicKey = "034200048043AF118B45629857DB693105849B2617FED249D59DFD29BE9A891ADEE7441A2D8C62020953DAEF038184E0244310CF2123C507F26F5380FFECC8D53E79B24E"; // String publicKey = "034200048043AF118B45629857DB693105849B2617FED249D59DFD29BE9A891ADEE7441A2D8C62020953DAEF038184E0244310CF2123C507F26F5380FFECC8D53E79B24E";
//
String orgData = "FFFFFFFFFFFFFFFF"; // String orgData = "FFFFFFFFFFFFFFFF";
String s = api.SM2Encrypt(Util.hexString2Bytes(publicKey), orgData.getBytes()); // String s = api.SM2Encrypt(Util.hexString2Bytes(publicKey), orgData.getBytes());
//
System.out.println("加密后的数据: " + s); // System.out.println("加密后的数据: " + s);
System.out.println("加密后的数据解base64: " + Util.bytes2HexString(Base64.getDecoder().decode(s))); // System.out.println("加密后的数据解base64: " + Util.bytes2HexString(Base64.getDecoder().decode(s)));
//
byte[] bytes = api.SM2DecryptC(certId, s); // byte[] bytes = api.SM2DecryptC(certId, s);
//
System.out.println("decData:" + new String(bytes)); // System.out.println("decData:" + new String(bytes));
} // }
//
// 测试通过 // // 测试通过
// 78 // // 78
@Test // @Test
public void testSM2DecryptOrder2() { // public void testSM2DecryptOrder2() {
String userId = "8015"; // String userId = "8015";
String orgData = "FfffffffffffffFfffffffffffffffff"; // String orgData = "FfffffffffffffFfffffffffffffffff";
//
// 通过用户id获取公钥 // // 通过用户id获取公钥
String publicKey = api.SM2GetPublicKeyC(userId, SydApi.FOR_SIGN); // String publicKey = api.SM2GetPublicKeyC(userId, SydApi.FOR_SIGN);
//
/** // /**
* 用指定的 SM2 公钥对指定的密文数据进行加密 // * 用指定的 SM2 公钥对指定的密文数据进行加密
* 输出的sm2密文结构为C1C2C3格式 // * 输出的sm2密文结构为C1C2C3格式
* @param publicKey 公钥钥串DER 编码HEX 格式 // * @param publicKey 公钥钥串DER 编码HEX 格式
* @param pOrgData 加密的数据 // * @param pOrgData 加密的数据
* @return 加密的数据 base64 编码 // * @return 加密的数据 base64 编码
*/ // */
String s = api.SM2EncryptOrder(Util.hexString2Bytes(publicKey), orgData.getBytes()); // String s = api.SM2EncryptOrder(Util.hexString2Bytes(publicKey), orgData.getBytes());
//
System.out.println("加密后的数据: " + s); // System.out.println("加密后的数据: " + s);
//
/** // /**
* 通过使用者 ID 所对应的私钥对指定的密文数据进行解密 // * 通过使用者 ID 所对应的私钥对指定的密文数据进行解密
* 输入的sm2密文结构为C1C2C3格式 // * 输入的sm2密文结构为C1C2C3格式
* @param userId 使用者的 ID最大长度为 16 位数字右对齐 // * @param userId 使用者的 ID最大长度为 16 位数字右对齐
* @param enData 加密的数据base64 编码 // * @param enData 加密的数据base64 编码
* @param keyType 密钥类型0签名证书, 1:加密证书 // * @param keyType 密钥类型0签名证书, 1:加密证书
* @return 明文数据 // * @return 明文数据
*/ // */
byte[] bytes = api.SM2DecryptOrder(userId, s, SydApi.FOR_SIGN); // byte[] bytes = api.SM2DecryptOrder(userId, s, SydApi.FOR_SIGN);
//
System.out.println("decData:" + new String(bytes)); // System.out.println("decData:" + new String(bytes));
} // }
//
@Test // @Test
public void testDecryptDE4() { // public void testDecryptDE4() {
String sn = "1004282452"; // String sn = "1004282452";
String orgCode = "00001111222233"; // String orgCode = "00001111222233";
//
/** // /**
* 产生对称密钥通过公钥加密生成网联格式的数字信封 // * 产生对称密钥通过公钥加密生成网联格式的数字信封
* // *
* @param certSerial * X509 证书的序列号 // * @param certSerial * X509 证书的序列号
* @param orgCode 机构码 // * @param orgCode 机构码
* @return RetWrap 包含 CipherKey, SessionKey, KCV // * @return RetWrap 包含 CipherKey, SessionKey, KCV
* CipherKey 公钥加密的会话密钥 ,BASE64 编码 // * CipherKey 公钥加密的会话密钥 ,BASE64 编码
* SessionKey 本地LMK 加密的会话密钥HEX 格式, 本地 LMK 加密的会话密钥长度HEX 格式(不包括第 1 个字符)一般为 33 Bytes默认输入值为缓冲区的大小 // * SessionKey 本地LMK 加密的会话密钥HEX 格式, 本地 LMK 加密的会话密钥长度HEX 格式(不包括第 1 个字符)一般为 33 Bytes默认输入值为缓冲区的大小
* KCV 会话密钥的检验值HEX 格式长度为 32H // * KCV 会话密钥的检验值HEX 格式长度为 32H
*/ // */
RetWrap retWrap = api.generateDEbyGS(sn, orgCode); // RetWrap retWrap = api.generateDEbyGS(sn, orgCode);
String CipherKey = (String) retWrap.get(SydApi.RET_CIPHER_KEY); // String CipherKey = (String) retWrap.get(SydApi.RET_CIPHER_KEY);
String sessionKey = (String) retWrap.get(SydApi.RET_SESSION_KEY); // String sessionKey = (String) retWrap.get(SydApi.RET_SESSION_KEY);
String kcv = (String) retWrap.get(SydApi.RET_KCV); // String kcv = (String) retWrap.get(SydApi.RET_KCV);
printRetWrap(retWrap); // printRetWrap(retWrap);
//
/** // /**
* 接收用私钥解密数字信封还原对称密钥 // * 接收用私钥解密数字信封还原对称密钥
* // *
* @param pCertSerial 输入 对方 X509 证书的序列号 // * @param pCertSerial 输入 对方 X509 证书的序列号
* @param pCipherKey 输入 公钥加密的会话密钥,BASE64 编码 // * @param pCipherKey 输入 公钥加密的会话密钥,BASE64 编码
* @return RetWrap 包含 SessionKey KCV // * @return RetWrap 包含 SessionKey KCV
* SessionKey 输出 本地LMK 加密的会话密钥格式为密钥类型|密钥密文比如02|密钥密文 // * SessionKey 输出 本地LMK 加密的会话密钥格式为密钥类型|密钥密文比如02|密钥密文
* KCV 会话密钥的检验值HEX 格式长度为 36H // * KCV 会话密钥的检验值HEX 格式长度为 36H
* orgCode 如果有机构码的话会返回机构码 // * orgCode 如果有机构码的话会返回机构码
*/ // */
RetWrap retWrap1 = api.decryptDE(sn, CipherKey); // RetWrap retWrap1 = api.decryptDE(sn, CipherKey);
printRetWrap(retWrap1); // printRetWrap(retWrap1);
} // }
//
//
// =========================工具方法===================== // // =========================工具方法=====================
//
public static void printRetWrap(RetWrap rw) { // public static void printRetWrap(RetWrap rw) {
printRetWrap(rw, false); // printRetWrap(rw, false);
} // }
//
/** // /**
* 输出 // * 输出
* @param rw // * @param rw
*/ // */
public static void printRetWrap(RetWrap rw, boolean flag) { // public static void printRetWrap(RetWrap rw, boolean flag) {
for (String s : rw.keySet()) { // for (String s : rw.keySet()) {
//
Object o = rw.get(s); // Object o = rw.get(s);
if (o instanceof String) { // if (o instanceof String) {
System.out.println(s + ":" + o); // System.out.println(s + ":" + o);
} else if (o instanceof byte[]) { // } else if (o instanceof byte[]) {
if (flag) { // if (flag) {
System.out.println(s + ": " + Util.bytes2HexString((byte[]) o)); // System.out.println(s + ": " + Util.bytes2HexString((byte[]) o));
} else { // } else {
System.out.println(s + ": " + new String((byte[]) o)); // System.out.println(s + ": " + new String((byte[]) o));
} // }
} else { // } else {
System.out.println(s + ":" + o); // System.out.println(s + ":" + o);
} // }
} // }
} // }
} //}

View File

@ -1,113 +1,113 @@
package com.sunyard.sydapi.test; //package com.sunyard.sydapi.test;
//
import com.sunyard.trans.PacketSN; //import com.sunyard.trans.PacketSN;
import org.junit.Test; //import org.junit.Test;
import racal.sunyard.main.SydApi4j; //import racal.sunyard.main.SydApi4j;
//
import java.lang.reflect.Method; //import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType; //import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type; //import java.lang.reflect.Type;
import java.text.SimpleDateFormat; //import java.text.SimpleDateFormat;
import java.util.Arrays; //import java.util.Arrays;
import java.util.Calendar; //import java.util.Calendar;
import java.util.Date; //import java.util.Date;
import java.util.HashMap; //import java.util.HashMap;
//
public class TestUtil { //public class TestUtil {
public static void main(String[] args) throws Exception { // public static void main(String[] args) throws Exception {
/* PacketSN sn = PacketSN.gen(); // /* PacketSN sn = PacketSN.gen();
HashMap<String, Object> packet = new HashMap<String, Object>(); // HashMap<String, Object> packet = new HashMap<String, Object>();
packet.put("header", sn.getSn().array()); // packet.put("header", sn.getSn().array());
HashMap<String, Object> data = new HashMap<String, Object>(); // HashMap<String, Object> data = new HashMap<String, Object>();
data.put("alg$option", 0); // data.put("alg$option", 0);
data.put("certificateModel$option", 0); // data.put("certificateModel$option", 0);
data.put("certificateSn", "113123"); // data.put("certificateSn", "113123");
data.put("keyType", "X"); // data.put("keyType", "X");
packet.put("data", data); // packet.put("data", data);
SectionWrap s=new SectionWrap(); // SectionWrap s=new SectionWrap();
HashMap<String, Section> sc = new HashMap<String, Section>(); // HashMap<String, Section> sc = new HashMap<String, Section>();
SectionValue s2=new SectionValue(); // SectionValue s2=new SectionValue();
s2.setValue("L".getBytes()); // s2.setValue("L".getBytes());
sc.put("data",s2); // sc.put("data",s2);
s.setSections(sc);*/ // s.setSections(sc);*/
// HashMap<String, Object> packet = new HashMap<String, Object>(); //// HashMap<String, Object> packet = new HashMap<String, Object>();
// HashMap<String, Object> data = new HashMap<String, Object>(); //// HashMap<String, Object> data = new HashMap<String, Object>();
// packet.put("data", data); //// packet.put("data", data);
// PacketSN sn = PacketSN.gen(); //// PacketSN sn = PacketSN.gen();
// packet.put("header", sn.getSn().array()); //// packet.put("header", sn.getSn().array());
// data.put("algorithmId$option", 0x1); //// data.put("algorithmId$option", 0x1);
// data.put("keyLength", 256); //// data.put("keyLength", 256);
////
//// try {
//// byte[] a=(byte[]) Util.eval("ResE2","getKeyLen",packet,null,null);
//// System.out.println(a[0]);
//// } catch (Exception e) {
//// e.printStackTrace();
//// }
//
//
// //
// try {
// byte[] a=(byte[]) Util.eval("ResE2","getKeyLen",packet,null,null);
// System.out.println(a[0]);
// } catch (Exception e) {
// e.printStackTrace();
// } // }
//
// /**
// * 获取所有方法
} // */
// @Test
/** // public void getMethod() {
* 获取所有方法 // Class<SydApi4j> jClass = SydApi4j.class;
*/ //
@Test // Method[] dm = jClass.getDeclaredMethods();
public void getMethod() { //
Class<SydApi4j> jClass = SydApi4j.class; // System.out.println(dm.length);
//
Method[] dm = jClass.getDeclaredMethods(); // for (int i = 0; i < dm.length; i++) {
// Type[] types = dm[i].getGenericParameterTypes();
System.out.println(dm.length); // System.out.print(dm[i].getName() + "(");
// for (int j = 0; j < types.length; j++) {
for (int i = 0; i < dm.length; i++) { // Type type = types[j];
Type[] types = dm[i].getGenericParameterTypes(); //
System.out.print(dm[i].getName() + "("); // System.out.print(getRealTypeName(type));
for (int j = 0; j < types.length; j++) { // if (j != types.length - 1) {
Type type = types[j]; // System.out.print(", ");
// }
System.out.print(getRealTypeName(type)); // }
if (j != types.length - 1) { // System.out.println(")");
System.out.print(", "); // }
} // }
} //
System.out.println(")"); // public String getRealTypeName(Type type) {
} //
} // String resultName = "";
// if (type instanceof ParameterizedType) {
public String getRealTypeName(Type type) { //
// resultName = getRealName(type.getTypeName()) + "<";
String resultName = ""; //
if (type instanceof ParameterizedType) { // Type[] actualTypes = ((ParameterizedType) type).getActualTypeArguments();
//
resultName = getRealName(type.getTypeName()) + "<"; // for (int z = 0; z < actualTypes.length; z++) {
// resultName += getRealName(actualTypes[z].getTypeName());
Type[] actualTypes = ((ParameterizedType) type).getActualTypeArguments(); // if (z != actualTypes.length - 1) {
// resultName += ", ";
for (int z = 0; z < actualTypes.length; z++) { // }
resultName += getRealName(actualTypes[z].getTypeName()); // }
if (z != actualTypes.length - 1) { // resultName += ">";
resultName += ", "; // } else {
} // resultName = getRealName(type.getTypeName());
} // }
resultName += ">"; //
} else { // return resultName.replace("$", ".");
resultName = getRealName(type.getTypeName()); // }
} //
// public String getRealName(String typeName) {
return resultName.replace("$", "."); // if (typeName.contains(".") && typeName.contains("<")) {
} // typeName = typeName.substring(0, typeName.indexOf("<"));
// return typeName.substring(typeName.lastIndexOf(".") + 1);
public String getRealName(String typeName) { // }
if (typeName.contains(".") && typeName.contains("<")) { //
typeName = typeName.substring(0, typeName.indexOf("<")); // if (typeName.contains(".")) {
return typeName.substring(typeName.lastIndexOf(".") + 1); // return typeName.substring(typeName.lastIndexOf(".") + 1);
} // }
//
if (typeName.contains(".")) { // return typeName;
return typeName.substring(typeName.lastIndexOf(".") + 1); // }
} //}
return typeName;
}
}

View File

@ -13,18 +13,18 @@ import java.util.regex.Pattern;
public class Sample4HY { public class Sample4HY {
private static final String SM2dn = "C=cn,O=CFCA TEST OCA1,OU=Local RA,OU=Organizational-1,CN=041@Z8000000001938231GX0@8000000001938231GX0@00000001"; private static final String SM2dn = "C=cn,O=CFCA TEST OCA1,OU=Local RA,OU=Organizational-1,CN=041@Z8000000001938231GX0@8000000001938231GX0@00000001";
private static final String SM2dn2 = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1" ; private static final String SM2dn2 = "C=CN,O=Sunyard,OU=8001,CN=8001" ;
private static final byte[] orgData = new byte[ 1*1024]; private static final byte[] orgData = new byte[ 10*1024];
public static void main(String[] args) { public static void main(String[] args) {
//调试模式控制台会打印发送报文 //调试模式控制台会打印发送报文
System.setProperty("com.sunyard.sydapi4j.debug", "true"); //System.setProperty("com.sunyard.sydapi4j.debug", "true");
//证书是否反序校验 //证书是否反序校验
//System.setProperty("com.sunyard.dnsort", "false"); //System.setProperty("com.sunyard.dnsort", "false");
//主备模式连接 //主备模式连接
SydApi4j.SYD_Set_Parameter_HA("172.16.17.1", "172.16.17.16", 8889, 1000); SydApi4j.SYD_Set_Parameter_HA("172.16.17.47", "172.16.17.16", 8889, 1000);
SydApi4j api = (SydApi4j) new SydApi4j(); SydApi4j api = (SydApi4j) new SydApi4j();
//设置连接 //设置连接
// SydApiBuilder builder = new SydApiBuilder().setIp("192.168.0.100"); // SydApiBuilder builder = new SydApiBuilder().setIp("192.168.0.100");
@ -33,11 +33,25 @@ public class Sample4HY {
// SM2裸签 // SM2裸签
byte[] nakedSign1 = api.SYD_NakedSign(orgData, SM2dn2); byte[] nakedSign1 = api.SYD_NakedSign(orgData, SM2dn2);
System.out.println("SM2数据裸签"+ Util.encodeBase64(nakedSign1)); System.out.println("SM2数据裸签"+ Util.bytes2HexString(nakedSign1));
boolean nakedVerify1 = api.SYD_NakedVerify(orgData, nakedSign1, SM2dn2); String sign= "30450221008E2342E7C1CECACC46BF7CB6777382FE6A1B19D89DF80428B87630EEC8D4D4CD02200CF82B240708765432ED74495DD73A0BF1E6DCDE6AE56C6CB4BEFA1A875E777E";
boolean nakedVerify1 = api.SYD_NakedVerify(orgData, Util.hexString2Bytes(sign), SM2dn2);
System.out.println("SM2数据验签"+nakedVerify1 ); System.out.println("SM2数据验签"+nakedVerify1 );
String s = api.detachedSign(1, orgData, SM2dn2);
System.out.println("原始数据小于4k签名"+s);
//原始数据大于4k
byte[] hash = api.SM3Hash(orgData);//计算hash
String s2 = api.detachedSign(0, hash, SM2dn2);
System.out.println("原始数据大于4k签名"+s2);
String aa = "MIIDLwYKKoEcz1UGAQQCAqCCAx8wggMbAgEBMQ4wDAYIKoEcz1UBgxEFADAMBgoqgRzPVQYBBAIBoIICMTCCAi0wggHSoAMCAQICBgGKaA2T3TAMBggqgRzPVQGDdQUAMEsxCzAJBgNVBAYTAkNOMQ4wDAYDVQQKEwVHTVNTTDEQMA4GA1UECxMHUEtJL1NNMjEaMBgGA1UEAxMRTWlkZGxlQ0EgZm9yIFRlc3QwIhgPMjAyMzA5MDUxNjAwMDBaGA8yMDI0MDkwNTE2MDAwMFowXTELMAkGA1UEBgwCQ04xCzAJBgNVBAgMAnpqMQswCQYDVQQHDAJoejEQMA4GA1UECgwHc3VueWFyZDEQMA4GA1UECwwHU00yVGVzdDEQMA4GA1UEAwwHU00yVGVzdDBZMBMGByqGSM49AgEGCCqBHM9VAYItA0IABJLNr8XSXI2UFvhoW5vBZMJUAyjzBaPR+0klKxVxwwKodFdH3iNrRjNf7Zj6ye8rP8TqKzHu9+zc1Wm3/DBPeiGjgYkwgYYwGwYDVR0jBBQwEoAQ+X9VtCeUM2KmVspvzF0a/zAZBgNVHQ4EEgQQK7bhyJnGBrfCV6cWZnJQJDAxBggrBgEFBQcBAQQlMCMwIQYIKwYBBQUHMAGGFWh0dHBzOi8vb2NzcC5nbXNzbC5jbjAJBgNVHRMEAjAAMA4GA1UdDwEB/wQEAwIAwDAMBggqgRzPVQGDdQUAA0cAMEQCIAHfg+kXDY0hwKtcFh4QBrI+C+96RPc5HuT8ls9Ribd2AiB4jFCV7CSa3aBscynS5LHEM1UNX9BxwMs9gtHUkDjLlDGBwjCBvwIBATBVMEsxCzAJBgNVBAYTAkNOMQ4wDAYDVQQKEwVHTVNTTDEQMA4GA1UECxMHUEtJL1NNMjEaMBgGA1UEAxMRTWlkZGxlQ0EgZm9yIFRlc3QCBgGKaA2T3TAMBggqgRzPVQGDEQUAMA0GCSqBHM9VAYItAQUABEYwRAIgEeWxsmL+TZFsDJkNAtOt572P+V53WZoPN9ppDcleOSECIHSuoF0zEUV8EPHS3omE9mvUuVMoO4E6vIWuwGTGurN4";
System.out.println(Util.bytes2HexString(Util.decodeBase64(aa)));
// //数字信封 // //数字信封
// RetWrap genSM2 = api.generateDEByDn( SM2dn2, orgData); // RetWrap genSM2 = api.generateDEByDn( SM2dn2, orgData);

View File

@ -16,17 +16,17 @@ public class Shangqing {
// 测试数据 // 测试数据
private String uid = "8012"; private String uid = "8012";
private String dn = "C=CN,ST=ZJ,L=HZ,O=sunyard,OU=test1,CN=test1"; private String dn = "C=CN,ST=ZJ,L=HZ,O=sunyard,OU=test1,CN=test1";
private String SM2dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"; private String SM2dn = "C=CN,ST=zj,L=hz,O=sunyard,OU=sm2Test,CN=sm2Test";
private String RSA ="C=cn,O=CFCA TEST CA,OU=NCS2,OU=Enterprises,CN=041@Z402451000010@ShanDong@00000001"; private String RSA ="C=cn,O=CFCA TEST CA,OU=NCS2,OU=Enterprises,CN=041@Z402451000010@ShanDong@00000001";
private byte[] orgData = new byte[10*1024]; private byte[] orgData = new byte[8];
@Before @Before
public void before() { public void before() {
// 通过设置debug的属性开启debug如果不设置则默认不打开 // 通过设置debug的属性开启debug如果不设置则默认不打开
System.setProperty("com.sunyard.sydapi4j.debug", "true"); System.setProperty("com.sunyard.sydapi4j.debug", "true");
api = (SydApi4j) new SydApi4j().connect("172.16.17.161", 8889, null, 1000); api = (SydApi4j) new SydApi4j().connect("172.16.17.196", 8889, null, 1000);
} }
@After @After
@ -77,19 +77,19 @@ public class Shangqing {
@Test @Test
public void dm(){ public void dm(){
// // 生成数字信封 // // 生成数字信封
// RetWrap retWrap = api.generateDEByDn(SM2dn, orgData ); RetWrap retWrap = api.generateDEByDn(SM2dn, orgData );
// byte[] cipherKey = (byte[]) retWrap.get(SydApi.RET_CIPHER_KEY); byte[] cipherKey = (byte[]) retWrap.get(SydApi.RET_CIPHER_KEY);
// System.out.println("数字信封: " + new String(cipherKey)); System.out.println("数字信封: " + new String(cipherKey));
//
// // 解密数字信封 // 解密数字信封
// RetWrap retWrap1 = api.decryptDEByDN(SM2dn, cipherKey); RetWrap retWrap1 = api.decryptDEByDN(SM2dn, cipherKey);
// byte[] oData = (byte[]) retWrap1.get("oData"); byte[] oData = (byte[]) retWrap1.get("oData");
// //
// //
// Assert.assertArrayEquals( oData, orgData ); // Assert.assertArrayEquals( oData, orgData );
String s = api.GenRandom(8); // String s = api.GenRandom(8);
System.out.println(s); // System.out.println(s);
} }