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

View File

@ -1,210 +1,210 @@
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 java.nio.charset.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();
}
}
//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();
// }
//}

View File

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

View File

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

View File

@ -13,18 +13,18 @@ import java.util.regex.Pattern;
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 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) {
//调试模式控制台会打印发送报文
System.setProperty("com.sunyard.sydapi4j.debug", "true");
//System.setProperty("com.sunyard.sydapi4j.debug", "true");
//证书是否反序校验
//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();
//设置连接
// SydApiBuilder builder = new SydApiBuilder().setIp("192.168.0.100");
@ -33,11 +33,25 @@ public class Sample4HY {
// SM2裸签
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 );
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);

View File

@ -16,17 +16,17 @@ public class Shangqing {
// 测试数据
private String uid = "8012";
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 byte[] orgData = new byte[10*1024];
private byte[] orgData = new byte[8];
@Before
public void before() {
// 通过设置debug的属性开启debug如果不设置则默认不打开
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
@ -77,19 +77,19 @@ public class Shangqing {
@Test
public void dm(){
// // 生成数字信封
// RetWrap retWrap = api.generateDEByDn(SM2dn, orgData );
// byte[] cipherKey = (byte[]) retWrap.get(SydApi.RET_CIPHER_KEY);
// System.out.println("数字信封: " + new String(cipherKey));
//
// // 解密数字信封
// RetWrap retWrap1 = api.decryptDEByDN(SM2dn, cipherKey);
// byte[] oData = (byte[]) retWrap1.get("oData");
RetWrap retWrap = api.generateDEByDn(SM2dn, orgData );
byte[] cipherKey = (byte[]) retWrap.get(SydApi.RET_CIPHER_KEY);
System.out.println("数字信封: " + new String(cipherKey));
// 解密数字信封
RetWrap retWrap1 = api.decryptDEByDN(SM2dn, cipherKey);
byte[] oData = (byte[]) retWrap1.get("oData");
//
//
// Assert.assertArrayEquals( oData, orgData );
String s = api.GenRandom(8);
System.out.println(s);
// String s = api.GenRandom(8);
// System.out.println(s);
}