diff --git a/pom.xml b/pom.xml index 2f61431..5dcf8f7 100644 --- a/pom.xml +++ b/pom.xml @@ -14,8 +14,8 @@ 3.4.2 UTF-8 UTF-8 - 1.8 - 1.8 + 1.6 + 1.6 @@ -78,7 +78,7 @@ com.sunyard proto - 1.0.20221215 + 1.1.20221215 @@ -149,8 +149,8 @@ - 7 - 7 + 6 + 6 groovy-eclipse-compiler true true diff --git a/src/main/java/com/jmeter/test/Test4ZS.java b/src/main/java/com/jmeter/test/Test4ZS.java index 9d98959..b07b6e5 100644 --- a/src/main/java/com/jmeter/test/Test4ZS.java +++ b/src/main/java/com/jmeter/test/Test4ZS.java @@ -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(); - } -} \ No newline at end of file +//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/test/java/com/sunyard/sydapi/test/TestGSYH.java b/src/test/java/com/sunyard/sydapi/test/TestGSYH.java index 4d6c319..4d6cbe6 100644 --- a/src/test/java/com/sunyard/sydapi/test/TestGSYH.java +++ b/src/test/java/com/sunyard/sydapi/test/TestGSYH.java @@ -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 = "\n" + - "\n" + - " \n" + - " \n" + - " 20211230001190300000000032001000\n" + - " 2021-12-30T09:27:49\n" + - " \n" + - " G4000131000016\n" + - " \n" + - " \n" + - " C1175662000017\n" + - " \n" + - " \n" + - " \n" + - " CC00\n" + - " CS01\n" + - " \n" + - " \n" + - ""; - - 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 = "\n" + +// "\n" + +// " \n" + +// " \n" + +// " 20211230001190300000000032001000\n" + +// " 2021-12-30T09:27:49\n" + +// " \n" + +// " G4000131000016\n" + +// " \n" + +// " \n" + +// " C1175662000017\n" + +// " \n" + +// " \n" + +// " \n" + +// " CC00\n" + +// " CS01\n" + +// " \n" + +// " \n" + +// ""; +// +// 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); +// } +// } +// } +//} diff --git a/src/test/java/com/sunyard/sydapi/test/TestUtil.java b/src/test/java/com/sunyard/sydapi/test/TestUtil.java index 5a311bd..fad7df9 100644 --- a/src/test/java/com/sunyard/sydapi/test/TestUtil.java +++ b/src/test/java/com/sunyard/sydapi/test/TestUtil.java @@ -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 packet = new HashMap(); - packet.put("header", sn.getSn().array()); - HashMap data = new HashMap(); - 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 sc = new HashMap(); - SectionValue s2=new SectionValue(); - s2.setValue("L".getBytes()); - sc.put("data",s2); - s.setSections(sc);*/ -// HashMap packet = new HashMap(); -// HashMap data = new HashMap(); -// 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 packet = new HashMap(); +// packet.put("header", sn.getSn().array()); +// HashMap data = new HashMap(); +// 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 sc = new HashMap(); +// SectionValue s2=new SectionValue(); +// s2.setValue("L".getBytes()); +// sc.put("data",s2); +// s.setSections(sc);*/ +//// HashMap packet = new HashMap(); +//// HashMap data = new HashMap(); +//// 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 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 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; +// } +//} diff --git a/src/test/java/sample/Sample4HY.java b/src/test/java/sample/Sample4HY.java index 1d19e7b..0947e9e 100644 --- a/src/test/java/sample/Sample4HY.java +++ b/src/test/java/sample/Sample4HY.java @@ -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); diff --git a/src/test/java/sample/Shangqing.java b/src/test/java/sample/Shangqing.java index ac6a37d..15a93d6 100644 --- a/src/test/java/sample/Shangqing.java +++ b/src/test/java/sample/Shangqing.java @@ -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); }