Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c90bb3ea0f | ||
|
|
c516397ad6 | ||
|
|
e299efe782 |
@@ -4,7 +4,7 @@
|
||||
|
||||
<groupId>com.sunyard</groupId>
|
||||
<artifactId>sydapi4j</artifactId>
|
||||
<version>1.0.2022-SNAPSHOT</version>
|
||||
<version>1.13.20220909-1</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<name>sydapi4j</name>
|
||||
@@ -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>
|
||||
@@ -26,41 +26,11 @@
|
||||
<version>4.12</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.github.houbb</groupId>
|
||||
<artifactId>junitperf</artifactId>
|
||||
<version>1.0.3</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
|
||||
<dependency>
|
||||
<groupId>com.sunyard</groupId>
|
||||
<artifactId>proto</artifactId>
|
||||
<version>1.1.20221215</version>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>cn.hutool</groupId>
|
||||
<artifactId>hutool-core</artifactId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<groupId>org.codehaus.groovy</groupId>
|
||||
<artifactId>groovy-all</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
|
||||
|
||||
|
||||
<dependency>
|
||||
<groupId>com.google.zxing</groupId>
|
||||
<artifactId>core</artifactId>
|
||||
<version>3.5.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.google.zxing</groupId>
|
||||
<artifactId>javase</artifactId>
|
||||
<version>3.5.0</version>
|
||||
<version>1.0.20221215</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
@@ -69,64 +39,6 @@
|
||||
<version>5.4.3</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
|
||||
<dependency>
|
||||
<groupId>org.bouncycastle</groupId>
|
||||
<artifactId>bcpkix-jdk15on</artifactId>
|
||||
<version>1.68</version>
|
||||
<!-- <scope>provided</scope>-->
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.bouncycastle</groupId>
|
||||
<artifactId>bcprov-jdk15on</artifactId>
|
||||
<version>1.68</version>
|
||||
<!-- <scope>provided</scope>-->
|
||||
</dependency>
|
||||
|
||||
<!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all -->
|
||||
<dependency>
|
||||
<groupId>cn.hutool</groupId>
|
||||
<artifactId>hutool-all</artifactId>
|
||||
<version>5.8.38</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.snmp4j</groupId>
|
||||
<artifactId>snmp4j</artifactId>
|
||||
<version>2.8.18</version>
|
||||
</dependency>
|
||||
|
||||
<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
|
||||
<dependency>
|
||||
<groupId>com.google.code.gson</groupId>
|
||||
<artifactId>gson</artifactId>
|
||||
<version>2.13.1</version>
|
||||
</dependency>
|
||||
|
||||
<!-- <dependency>-->
|
||||
<!-- <groupId>org.codehaus.groovy</groupId>-->
|
||||
<!-- <artifactId>groovy-all</artifactId>-->
|
||||
<!-- <version>3.0.9</version>-->
|
||||
<!-- <version>4.0.26</version>-->
|
||||
<!-- </dependency>-->
|
||||
<!-- <dependency>-->
|
||||
<!-- <groupId>ch.qos.logback</groupId>-->
|
||||
<!-- <artifactId>logback-classic</artifactId>-->
|
||||
<!-- <version>1.3.15</version>-->
|
||||
<!-- <scope>compile</scope>-->
|
||||
<!-- </dependency>-->
|
||||
|
||||
<!--<dependency>-->
|
||||
<!--<groupId>club.fullstack</groupId>-->
|
||||
<!--<artifactId>serialize</artifactId>-->
|
||||
<!--<version>[1.0.201806051035, 1.1.SNAPSHOT)</version>-->
|
||||
<!--</dependency>-->
|
||||
|
||||
|
||||
<!-- https://mvnrepository.com/artifact/com.github.wvengen/proguard-maven-plugin -->
|
||||
<!-- https://mvnrepository.com/artifact/com.github.wvengen/proguard-maven-plugin -->
|
||||
</dependencies>
|
||||
<build>
|
||||
<finalName>sydapi4j</finalName>
|
||||
@@ -136,7 +48,6 @@
|
||||
<groupId>org.codehaus.groovy</groupId>
|
||||
<artifactId>groovy-eclipse-compiler</artifactId>
|
||||
<version>2.9.2-01</version>
|
||||
<!-- <version>3.5.0-01</version>-->
|
||||
<extensions>true</extensions>
|
||||
</plugin>
|
||||
|
||||
@@ -144,7 +55,6 @@
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.3</version>
|
||||
<!-- <version>3.8.1</version>-->
|
||||
<executions>
|
||||
<execution>
|
||||
<id>compile</id>
|
||||
@@ -162,8 +72,8 @@
|
||||
</execution>
|
||||
</executions>
|
||||
<configuration>
|
||||
<source>8</source>
|
||||
<target>8</target>
|
||||
<source>1.6</source>
|
||||
<target>1.6</target>
|
||||
<compilerId>groovy-eclipse-compiler</compilerId>
|
||||
<verbose>true</verbose>
|
||||
<fork>true</fork>
|
||||
@@ -256,7 +166,7 @@
|
||||
<configuration>
|
||||
<archive>
|
||||
<manifest>
|
||||
<mainClass>com.Sample.TestDemo</mainClass>
|
||||
<mainClass>racal.sunyard.main.Version</mainClass>
|
||||
</manifest>
|
||||
</archive>
|
||||
<descriptorRefs>
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package com.jmeter.test;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.sunyard.SydApiException;
|
||||
import com.sunyard.proto.Util;
|
||||
import org.apache.jmeter.config.Arguments;
|
||||
@@ -11,10 +10,6 @@ import racal.sunyard.main.SydApi4j;
|
||||
import racal.sunyard.main.SydApiBuilder;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
|
||||
public class Test4Jemter extends AbstractJavaSamplerClient {
|
||||
@@ -22,21 +17,15 @@ public class Test4Jemter extends AbstractJavaSamplerClient {
|
||||
private String SM2dn ;
|
||||
private String RSAdn ;
|
||||
private String ip ;
|
||||
|
||||
private int port;
|
||||
private String ip2 ;
|
||||
private String oData;
|
||||
private String sign;
|
||||
|
||||
private String detachedSign;
|
||||
private byte[] orgData;
|
||||
|
||||
private int type;
|
||||
|
||||
private static ThreadLocal<SydApi4j> api;
|
||||
|
||||
private int dataLength;
|
||||
|
||||
|
||||
/**
|
||||
* 定义默认的参数,在jmeter中会自动显示在这里定义的默认参数
|
||||
@@ -45,17 +34,13 @@ public class Test4Jemter extends AbstractJavaSamplerClient {
|
||||
@Override
|
||||
public Arguments getDefaultParameters() {
|
||||
Arguments arguments = new Arguments();
|
||||
arguments.addArgument("SM2dn", "C=CN,ST=zz,L=zz,O=zzz,CN=zzzzz");
|
||||
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.1.41.139");
|
||||
arguments.addArgument("ip2", "172.1.41.96");
|
||||
// arguments.addArgument("port", "8891");
|
||||
arguments.addArgument("ip", "192.168.0.166");
|
||||
// arguments.addArgument("ip2", "172.16.17.161");
|
||||
arguments.addArgument("dataLength", "1024");
|
||||
arguments.addArgument("type", "1");
|
||||
arguments.addArgument("sign", "12345678");
|
||||
arguments.addArgument("detachedSign", "12345678");
|
||||
return arguments;
|
||||
}
|
||||
|
||||
@@ -70,23 +55,16 @@ public class Test4Jemter extends AbstractJavaSamplerClient {
|
||||
RSAdn = context.getParameter("RSAdn");
|
||||
oData = context.getParameter("orgData");
|
||||
ip = context.getParameter("ip");
|
||||
ip2 = context.getParameter("ip2");
|
||||
// port = Integer.parseInt(context.getParameter("8891"));
|
||||
// ip2 = context.getParameter("ip2");
|
||||
dataLength = context.getIntParameter("dataLength");
|
||||
type = context.getIntParameter("type");
|
||||
sign = context.getParameter("sign");
|
||||
detachedSign = context.getParameter("detachedSign");
|
||||
System.setProperty("com.sunyard.dnsort", "false");
|
||||
api = new ThreadLocal<SydApi4j>() {
|
||||
@Override
|
||||
public SydApi4j initialValue() {
|
||||
//
|
||||
// SydApiBuilder builder = new SydApiBuilder().setIp(ip);
|
||||
// final SydApi4j api = (SydApi4j) builder.build();
|
||||
SydApi4j.SYD_Set_Parameter_HA(ip, ip2, 8889, 1000);
|
||||
final SydApi4j api1 = (SydApi4j) new SydApi4j();
|
||||
return api1;
|
||||
|
||||
SydApiBuilder builder = new SydApiBuilder().setIp(ip);
|
||||
final SydApi4j api = (SydApi4j) builder.build();
|
||||
return api;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -105,21 +83,18 @@ public class Test4Jemter extends AbstractJavaSamplerClient {
|
||||
//设置开始标志,否则无法统计tps等
|
||||
sr.sampleStart();
|
||||
try {
|
||||
// orgData = oData.getBytes(); //SM2裸签
|
||||
orgData = new byte[dataLength];
|
||||
orgData = oData.getBytes(); //SM2裸签
|
||||
//执行业务逻辑
|
||||
switch(type){
|
||||
case 1:
|
||||
// api.get().SYD_NakedSign(SM2dn, orgData, (byte[]) null);
|
||||
api.get().SYD_NakedSign(orgData,SM2dn);
|
||||
api.get().SYD_NakedSign(SM2dn, orgData, (byte[]) null);
|
||||
sr.setResponseCodeOK();
|
||||
//sr.setResponseData(Util.encodeBase64(nakedSign1), StandardCharsets.UTF_8.displayName());
|
||||
break;
|
||||
|
||||
|
||||
case 2:
|
||||
// api.get().SYD_NakedVerify(SM2dn, Util.decodeBase64(sign), orgData, (byte[])null) ;
|
||||
api.get().SYD_NakedVerify(orgData,Util.hexString2Bytes(sign), SM2dn);
|
||||
api.get().SYD_NakedVerify(SM2dn, Util.decodeBase64(sign), orgData, (byte[])null) ;
|
||||
sr.setResponseCodeOK();
|
||||
//sr.setResponseData(String.valueOf(nakedVerify1), StandardCharsets.UTF_8.displayName());
|
||||
break;
|
||||
@@ -138,15 +113,13 @@ public class Test4Jemter extends AbstractJavaSamplerClient {
|
||||
break;
|
||||
|
||||
case 5:
|
||||
// api.get().detachedSign(1, orgData, SM2dn);
|
||||
api.get().detachedSign(orgData, SM2dn);
|
||||
api.get().detachedSign(1, orgData, SM2dn);
|
||||
sr.setResponseCodeOK();
|
||||
//sr.setResponseData(detSign1, StandardCharsets.UTF_8.displayName());
|
||||
break;
|
||||
|
||||
case 6:
|
||||
// api.get().detachedVerify(1, orgData, sign);
|
||||
api.get().detachedVerify(orgData, detachedSign);
|
||||
api.get().detachedVerify(1, orgData, sign);
|
||||
sr.setResponseCodeOK();
|
||||
//sr.setResponseData(String.valueOf(detV1), StandardCharsets.UTF_8.displayName());
|
||||
break;
|
||||
@@ -216,17 +189,6 @@ public class Test4Jemter extends AbstractJavaSamplerClient {
|
||||
//sr.setResponseData(new String(oDataRSA), StandardCharsets.UTF_8.displayName());
|
||||
break;
|
||||
|
||||
case 17:
|
||||
sr.setResponseCodeOK();
|
||||
break;
|
||||
case 18:
|
||||
testAhnx();
|
||||
sr.setResponseCodeOK();
|
||||
break;
|
||||
case 19:
|
||||
testImportCert();
|
||||
sr.setResponseCodeOK();
|
||||
break;
|
||||
default:
|
||||
sr.setResponseCodeOK();
|
||||
sr.setResponseData("请选择测试组", StandardCharsets.UTF_8.displayName());
|
||||
@@ -244,54 +206,6 @@ public class Test4Jemter extends AbstractJavaSamplerClient {
|
||||
return sr;
|
||||
}
|
||||
|
||||
public void testAhnx() {
|
||||
|
||||
orgData = new byte[1024];
|
||||
//裸签
|
||||
byte[] nakedSign = api.get().SYD_NakedSign(orgData,SM2dn);
|
||||
|
||||
//裸签验签
|
||||
boolean ver = api.get().SYD_NakedVerify(orgData,nakedSign, SM2dn);
|
||||
|
||||
//detach签名
|
||||
String detachedSign = api.get().detachedSign(orgData, SM2dn);
|
||||
|
||||
//detach验签
|
||||
boolean ver1 = api.get().detachedVerify(orgData, detachedSign);
|
||||
|
||||
|
||||
testImportCert();
|
||||
}
|
||||
|
||||
public void testImportCert() {
|
||||
String cert = "-----BEGIN CERTIFICATE-----\n" +
|
||||
"MIICMDCCAdagAwIBAgIJAOWoGwJCnjlLMAoGCCqBHM9VAYN1MGcxCzAJBgNVBAYT\n" +
|
||||
"AkNOMRAwDgYDVQQIDAdCZWlqaW5nMRAwDgYDVQQHDAdIYWlEaWFuMRMwEQYDVQQK\n" +
|
||||
"DApHTUNlcnQub3JnMR8wHQYDVQQDDBZHTUNlcnQgR00gUm9vdCBDQSAtIDAxMB4X\n" +
|
||||
"DTI1MDUxMzAyMzUxM1oXDTI2MDUxMzAyMzUxM1owRTELMAkGA1UEBgwCQ04xCzAJ\n" +
|
||||
"BgNVBAgMAnp6MQswCQYDVQQHDAJ6ejEMMAoGA1UECgwDenp6MQ4wDAYDVQQDDAV6\n" +
|
||||
"enp6ejBZMBMGByqGSM49AgEGCCqBHM9VAYItA0IABK5fyRSACWPIBBr/3U+qvjvp\n" +
|
||||
"niropv2PrA3ZLU1bG8vQpwAEMA0kwyqGgXURBPbvWdAhN7s9wfvHbJyMd9CMZGqj\n" +
|
||||
"gYwwgYkwDAYDVR0TAQH/BAIwADALBgNVHQ8EBAMCB4AwLAYJYIZIAYb4QgENBB8W\n" +
|
||||
"HUdNQ2VydC5vcmcgU2lnbmVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBSQB7UUqEuG\n" +
|
||||
"kl4mrx3MAhKTptfbYjAfBgNVHSMEGDAWgBR/Wl47AIRZKg+YvqEObzmVQxBNBzAK\n" +
|
||||
"BggqgRzPVQGDdQNIADBFAiEA4kgTdn/iA/XYfjTEeOcELwBXd0tTFghkpfP8DhBF\n" +
|
||||
"KFQCIAXZTL6VPtW67tM/DF4ZgFt5S/YIiFombKa2bWOfL81u\n" +
|
||||
"-----END CERTIFICATE-----";
|
||||
Map<String, String> map = new HashMap<>();
|
||||
map.put("snmp.target.ip", "172.1.41.191");
|
||||
map.put("snmp.target.port", "162");
|
||||
map.put("enterprise.oid", "1.3.6.1.4.1.9999");
|
||||
map.put("snmp.community", "public");
|
||||
map.put("snmp.version", "1");
|
||||
List<String> masterNodes = new ArrayList<>();
|
||||
masterNodes.add("172.1.41.139:8889");
|
||||
|
||||
String snmpConfig = new Gson().toJson(map);
|
||||
SydApi4j sydApi4j = new SydApi4j();
|
||||
sydApi4j.importCertToServers(masterNodes, 100, cert, "12345678", snmpConfig);
|
||||
}
|
||||
|
||||
/**
|
||||
* 测试完成后执行,一般用于关闭资源
|
||||
* @param context 上下文对象,可用于获取jmeter传递的参数
|
||||
|
||||
@@ -8,8 +8,6 @@ import com.sunyard.inf.customize.SydQNUCApi;
|
||||
import com.sunyard.inf.customize.SydUnionPayApi;
|
||||
import racal.sunyard.main.SydApiBuilder;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by Cheney on 2017/11/11.
|
||||
* 程序调用接口
|
||||
@@ -119,5 +117,4 @@ public interface SydApi extends
|
||||
public Object getBindObject();
|
||||
|
||||
public void setBindObject(Object bindObject);
|
||||
|
||||
}
|
||||
|
||||
@@ -68,11 +68,6 @@ public class SydApiException extends RuntimeException{
|
||||
break;
|
||||
}
|
||||
|
||||
case 0x8004 : {
|
||||
msg = "证书已过期";
|
||||
break;
|
||||
}
|
||||
|
||||
case 32770:
|
||||
msg = "签名验证错误(P7) ";
|
||||
break;
|
||||
@@ -137,16 +132,6 @@ public class SydApiException extends RuntimeException{
|
||||
}
|
||||
}
|
||||
|
||||
public SydApiException(String msg, int retCode, boolean flag){
|
||||
super(String.format(" %04X", retCode) + ":" + ( null == msg ? transMsg(retCode) : msg ));
|
||||
this.retCode = retCode;
|
||||
if (null == msg || "".equals(msg)){
|
||||
transMsg();
|
||||
}else {
|
||||
this.msg = msg;
|
||||
}
|
||||
}
|
||||
|
||||
public SydApiException(String msg, int ret, Throwable e) {
|
||||
super("SydApiException(code =" + String.format(" %04x", ret) + " : " + "msg =" + (msg == null ? "未定义的错误" : msg) + ")", e);
|
||||
this.retCode = ret;
|
||||
|
||||
@@ -1,86 +0,0 @@
|
||||
package com.sunyard.entity;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class ServerConfig {
|
||||
|
||||
/**
|
||||
* 主机节点信息
|
||||
*/
|
||||
private List<ServerAddress> masterNodeList;
|
||||
|
||||
/**
|
||||
* 备机节点信息
|
||||
*/
|
||||
private List<ServerAddress> slaveNodeList;
|
||||
|
||||
|
||||
/**
|
||||
* 连接超时时间
|
||||
*/
|
||||
private Integer timeout;
|
||||
|
||||
public ServerConfig(List<ServerAddress> masterNodeList, List<ServerAddress> slaveNodeList, Integer timeout) {
|
||||
this.masterNodeList = masterNodeList;
|
||||
this.slaveNodeList = slaveNodeList;
|
||||
this.timeout = timeout;
|
||||
}
|
||||
|
||||
public List<ServerAddress> getMasterNodeList() {
|
||||
return masterNodeList;
|
||||
}
|
||||
|
||||
public void setMasterNodeList(List<ServerAddress> masterNodeList) {
|
||||
this.masterNodeList = masterNodeList;
|
||||
}
|
||||
|
||||
public Integer getTimeout() {
|
||||
return timeout;
|
||||
}
|
||||
|
||||
public void setTimeout(Integer timeout) {
|
||||
this.timeout = timeout;
|
||||
}
|
||||
|
||||
public List<ServerAddress> getSlaveNodeList() {
|
||||
return slaveNodeList;
|
||||
}
|
||||
|
||||
public void setSlaveNodeList(List<ServerAddress> slaveNodeList) {
|
||||
this.slaveNodeList = slaveNodeList;
|
||||
}
|
||||
|
||||
|
||||
public static class ServerAddress {
|
||||
|
||||
|
||||
private String ip;
|
||||
|
||||
private Integer port;
|
||||
|
||||
public ServerAddress(String ip, Integer port) {
|
||||
this.ip = ip;
|
||||
this.port = port;
|
||||
}
|
||||
|
||||
|
||||
public String getIp() {
|
||||
return ip;
|
||||
}
|
||||
|
||||
public void setIp(String ip) {
|
||||
this.ip = ip;
|
||||
}
|
||||
|
||||
public Integer getPort() {
|
||||
return port;
|
||||
}
|
||||
|
||||
public void setPort(Integer port) {
|
||||
this.port = port;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -151,8 +151,6 @@ public interface SydCertApi {
|
||||
RetWrap importCert(byte[] certData, byte[] organizationId, CertUsage... us);
|
||||
RetWrap importCert(byte[] certData, byte[] organizationId);
|
||||
|
||||
String importCert(String cert);
|
||||
|
||||
|
||||
/**
|
||||
* 从加密设备中删除指定 DN 的公钥证书
|
||||
|
||||
@@ -240,9 +240,6 @@ public interface SydGenApi {
|
||||
*/
|
||||
RetWrap generateDEByDn(String certSerial, byte[] oData);
|
||||
|
||||
|
||||
RetWrap generateDEByDnICBC(String certSerial,String iv, byte[] oData,int roundmod);
|
||||
|
||||
RetWrap generateDEByDnRSA(int alg,String certSerial, byte[] oData);
|
||||
|
||||
/**
|
||||
@@ -326,8 +323,6 @@ public interface SydGenApi {
|
||||
* orgCode 如果有机构码的话会返回机构码
|
||||
*/
|
||||
RetWrap decryptDEByDN(String certSerial, byte[] pCipherKey);
|
||||
|
||||
RetWrap decryptDEByDNICBC(String certSerial, String IV,String pCipherKey,int roundmod);
|
||||
RetWrap decryptDEByDNRSA(int alg,String certSerial, byte[] pCipherKey);
|
||||
/**
|
||||
* 接收用私钥解密数字信封,还原对称密钥。
|
||||
|
||||
@@ -1,112 +0,0 @@
|
||||
package com.sunyard.snmp;
|
||||
|
||||
import org.snmp4j.*;
|
||||
import org.snmp4j.event.ResponseEvent;
|
||||
import org.snmp4j.event.ResponseListener;
|
||||
import org.snmp4j.mp.*;
|
||||
import org.snmp4j.security.*;
|
||||
import org.snmp4j.smi.*;
|
||||
import org.snmp4j.transport.DefaultUdpTransportMapping;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
import java.util.Vector;
|
||||
|
||||
public class SnmpTrapSender implements AutoCloseable{
|
||||
private Snmp snmp;
|
||||
|
||||
// 配置参数
|
||||
private String ip;
|
||||
private int port;
|
||||
private String enterpriseOid;
|
||||
private String community;
|
||||
private int version;
|
||||
|
||||
public SnmpTrapSender(Map<String, String> map) throws Exception {
|
||||
loadConfig(map);
|
||||
initializeSNMP();
|
||||
}
|
||||
|
||||
public void loadConfig(Map<String, String> map) {
|
||||
ip = map.getOrDefault("snmp.target.ip", null);
|
||||
port = Integer.parseInt(map.getOrDefault("snmp.target.port", "162"));
|
||||
enterpriseOid = map.getOrDefault("enterprise.oid", null);
|
||||
community = map.getOrDefault("snmp.community", "public");
|
||||
version = Integer.parseInt(map.getOrDefault("snmp.version", "1"));
|
||||
}
|
||||
|
||||
private void initializeSNMP() throws Exception {
|
||||
TransportMapping<?> transport = new DefaultUdpTransportMapping();
|
||||
snmp = new Snmp(transport);
|
||||
snmp.listen();
|
||||
}
|
||||
|
||||
public ResponseEvent sendTrap(String message, int severity) throws Exception {
|
||||
ResponseEvent event = null;
|
||||
switch (version) {
|
||||
case SnmpConstants.version1:
|
||||
event = sendV1Trap(message, severity);
|
||||
break;
|
||||
case SnmpConstants.version2c:
|
||||
event = sendV2Trap(message, severity);
|
||||
break;
|
||||
default:
|
||||
throw new IllegalArgumentException("不支持的SNMP版本");
|
||||
}
|
||||
return event;
|
||||
}
|
||||
|
||||
private ResponseEvent sendV1Trap(String message, int severity) throws Exception {
|
||||
CommunityTarget target = createCommunityTarget(SnmpConstants.version1);
|
||||
PDUv1 pdu = new PDUv1();
|
||||
configureCommonTrap(pdu, message, severity);
|
||||
pdu.setGenericTrap(PDUv1.ENTERPRISE_SPECIFIC);
|
||||
return snmp.send(pdu, target);
|
||||
}
|
||||
|
||||
private ResponseEvent sendV2Trap(String message, int severity) throws Exception {
|
||||
CommunityTarget target = createCommunityTarget(SnmpConstants.version2c);
|
||||
PDU pdu = new PDU();
|
||||
configureCommonTrap(pdu, message, severity);
|
||||
pdu.setType(PDU.TRAP);
|
||||
return snmp.send(pdu, target);
|
||||
}
|
||||
|
||||
|
||||
private void configureCommonTrap(PDU pdu, String message, int severity) {
|
||||
pdu.add(new VariableBinding(SnmpConstants.sysUpTime,
|
||||
new TimeTicks(System.currentTimeMillis()/1000)));
|
||||
pdu.add(new VariableBinding(SnmpConstants.snmpTrapOID,
|
||||
new OID(enterpriseOid + ".1.1")));
|
||||
byte[] msg = new byte[10];
|
||||
try {
|
||||
msg = message.getBytes("GBK");
|
||||
} catch (Exception e) {
|
||||
System.out.println("编码错误");
|
||||
}
|
||||
pdu.add(new VariableBinding(new OID(enterpriseOid + ".2.1"),
|
||||
new OctetString(msg)));
|
||||
pdu.add(new VariableBinding(new OID(enterpriseOid + ".2.2"),
|
||||
new Integer32(severity)));
|
||||
}
|
||||
|
||||
private CommunityTarget createCommunityTarget(int version) {
|
||||
CommunityTarget target = new CommunityTarget();
|
||||
target.setCommunity(new OctetString(community));
|
||||
target.setAddress(GenericAddress.parse("udp:"+ip+"/"+port));
|
||||
target.setVersion(version);
|
||||
target.setTimeout(5000);
|
||||
target.setRetries(3);
|
||||
return target;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() throws Exception {
|
||||
if (snmp != null) {
|
||||
snmp.close();
|
||||
snmp = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,121 +0,0 @@
|
||||
package com.sunyard.task;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.concurrent.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class AsyncTaskExecutor {
|
||||
|
||||
private final ExecutorService taskExecutor;
|
||||
private final ScheduledExecutorService retryScheduler;
|
||||
|
||||
public AsyncTaskExecutor(int taskThreads, int retryThreads) {
|
||||
this.taskExecutor = Executors.newFixedThreadPool(taskThreads);
|
||||
this.retryScheduler = Executors.newScheduledThreadPool(retryThreads);
|
||||
}
|
||||
|
||||
// 默认配置构造函数
|
||||
public AsyncTaskExecutor() {
|
||||
this(2, 2);
|
||||
}
|
||||
|
||||
public List<TaskOutcome<String>> execBatchTasks(List<TaskContext<String>> taskContexts) {
|
||||
// 转换每个Future为明确的TaskOutcome类型
|
||||
List<CompletableFuture<TaskOutcome<String>>> futures = taskContexts.stream()
|
||||
.map(task ->
|
||||
retryWithDelay(task)
|
||||
.<TaskOutcome<String>>handle((result, ex) -> {
|
||||
if (ex != null) {
|
||||
// 提取原始异常
|
||||
Throwable cause = ex instanceof CompletionException ? ex.getCause() : ex;
|
||||
return new TaskOutcome<>(task, cause);
|
||||
} else {
|
||||
return new TaskOutcome<>(task, result);
|
||||
}
|
||||
})
|
||||
)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
// 等待所有任务完成
|
||||
CompletableFuture<Void> allFutures = CompletableFuture.allOf(
|
||||
futures.toArray(new CompletableFuture[0])
|
||||
);
|
||||
|
||||
// 收集处理结果
|
||||
return allFutures.thenApply(v ->
|
||||
futures.stream()
|
||||
.map(CompletableFuture::join)
|
||||
.collect(Collectors.toList())
|
||||
).join();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 带延迟的重试逻辑
|
||||
*/
|
||||
private <T> CompletableFuture<T> retryWithDelay(TaskContext<T> context) {
|
||||
return CompletableFuture.supplyAsync(context.getTask(), taskExecutor)
|
||||
.handleAsync((result, ex) -> {
|
||||
if (ex == null) {
|
||||
return CompletableFuture.completedFuture(result);
|
||||
} else {
|
||||
return handleRetry(context, ex);
|
||||
}
|
||||
}, taskExecutor)
|
||||
.thenCompose(f -> f);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 处理重试逻辑
|
||||
*/
|
||||
private <T> CompletableFuture<T> handleRetry(TaskContext<T> context, Throwable ex) {
|
||||
if (context.canRetry()) {
|
||||
context.decreaseRetry();
|
||||
// System.out.printf("[重试调度] ID: %s| IP:%s | 延迟: %ss | 剩余重试: %d | 错误: %s%n",
|
||||
// context.getTaskId(),
|
||||
// context.getAddress(),
|
||||
// context.getRetryDelay().getSeconds(),
|
||||
// context.getRetriesLeft(),
|
||||
// ex.getCause().getMessage());
|
||||
|
||||
// 创建延迟重试的Future
|
||||
CompletableFuture<T> delayedRetry = new CompletableFuture<>();
|
||||
retryScheduler.schedule(() -> {
|
||||
retryWithDelay(context).whenComplete((retryResult, retryEx) -> {
|
||||
if (retryEx != null) {
|
||||
delayedRetry.completeExceptionally(retryEx);
|
||||
} else {
|
||||
delayedRetry.complete(retryResult);
|
||||
}
|
||||
});
|
||||
}, context.getRetryDelay().toMillis(), TimeUnit.MILLISECONDS);
|
||||
|
||||
return delayedRetry;
|
||||
} else {
|
||||
// 重试耗尽,传递原始异常
|
||||
CompletableFuture<T> failed = new CompletableFuture<>();
|
||||
failed.completeExceptionally(ex);
|
||||
return failed;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 关闭线程池
|
||||
*/
|
||||
public void shutdown() {
|
||||
taskExecutor.shutdown();
|
||||
retryScheduler.shutdown();
|
||||
try {
|
||||
if (!taskExecutor.awaitTermination(1, TimeUnit.SECONDS)) {
|
||||
taskExecutor.shutdownNow();
|
||||
}
|
||||
if (!retryScheduler.awaitTermination(1, TimeUnit.SECONDS)) {
|
||||
retryScheduler.shutdownNow();
|
||||
}
|
||||
} catch (InterruptedException e) {
|
||||
Thread.currentThread().interrupt();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,50 +0,0 @@
|
||||
package com.sunyard.task;
|
||||
|
||||
import java.time.Duration;
|
||||
import java.util.UUID;
|
||||
import java.util.function.Supplier;
|
||||
|
||||
public class TaskContext<T> {
|
||||
private final String taskId; // 唯一任务ID
|
||||
private final Supplier<T> task; // 原始任务逻辑
|
||||
private int retriesLeft; // 剩余重试次数
|
||||
private final Duration retryDelay; // 重试延迟
|
||||
|
||||
private final String address;
|
||||
|
||||
public TaskContext(Supplier<T> task, int maxRetries, Duration retryDelay, String address) {
|
||||
this.taskId = UUID.randomUUID().toString();
|
||||
this.task = task;
|
||||
this.retriesLeft = maxRetries;
|
||||
this.retryDelay = retryDelay;
|
||||
this.address = address;
|
||||
}
|
||||
|
||||
public String getAddress() {
|
||||
return address;
|
||||
}
|
||||
|
||||
public String getTaskId() {
|
||||
return taskId;
|
||||
}
|
||||
|
||||
public Supplier<T> getTask() {
|
||||
return task;
|
||||
}
|
||||
|
||||
public int getRetriesLeft() {
|
||||
return retriesLeft;
|
||||
}
|
||||
|
||||
public boolean canRetry() {
|
||||
return retriesLeft > 0;
|
||||
}
|
||||
|
||||
public void decreaseRetry() {
|
||||
retriesLeft--;
|
||||
}
|
||||
|
||||
public Duration getRetryDelay() {
|
||||
return retryDelay;
|
||||
}
|
||||
}
|
||||
@@ -1,35 +0,0 @@
|
||||
package com.sunyard.task;
|
||||
|
||||
public class TaskOutcome<T> {
|
||||
private final TaskContext<T> context;
|
||||
private final T result;
|
||||
private final Throwable error;
|
||||
|
||||
public TaskOutcome(TaskContext<T> context, T result) {
|
||||
this.context = context;
|
||||
this.result = result;
|
||||
this.error = null;
|
||||
}
|
||||
|
||||
public TaskOutcome(TaskContext<T> context, Throwable error) {
|
||||
this.context = context;
|
||||
this.result = null;
|
||||
this.error = error;
|
||||
}
|
||||
|
||||
public boolean isSuccess() {
|
||||
return error == null;
|
||||
}
|
||||
|
||||
public TaskContext<T> getContext() {
|
||||
return context;
|
||||
}
|
||||
|
||||
public T getResult() {
|
||||
return result;
|
||||
}
|
||||
|
||||
public Throwable getError() {
|
||||
return error;
|
||||
}
|
||||
}
|
||||
@@ -46,14 +46,12 @@ public class CertUtil {
|
||||
return (X509Certificate) CF.generateCertificate(new ByteArrayInputStream(certificateString.getBytes())); // 将文件流的证书转化为证书类
|
||||
}
|
||||
|
||||
public static String convertToPem(String cert) throws CertificateEncodingException {
|
||||
public static String convertToPem(X509Certificate cert) throws CertificateEncodingException {
|
||||
|
||||
String cert_begin = "-----BEGIN CERTIFICATE-----\n";
|
||||
String end_cert = "\n-----END CERTIFICATE-----";
|
||||
|
||||
// byte[] derCert = cert.getEncoded();
|
||||
|
||||
byte[] derCert = cert.getBytes();
|
||||
byte[] derCert = cert.getEncoded();
|
||||
String pemCertPre = new String(Base64.encode(derCert, true));
|
||||
String pemCert = cert_begin + pemCertPre + end_cert;
|
||||
return pemCert;
|
||||
@@ -100,25 +98,6 @@ public class CertUtil {
|
||||
return signAlg.toUpperCase().indexOf("SM2") >= 0;
|
||||
}
|
||||
|
||||
|
||||
public static String getDN(String cert) {
|
||||
String pemCert;
|
||||
if(cert.contains("-----BEGIN CERTIFICATE-----")){
|
||||
pemCert =cert;
|
||||
}else {
|
||||
String cert_begin = "-----BEGIN CERTIFICATE-----\n";
|
||||
String end_cert = "\n-----END CERTIFICATE-----";
|
||||
pemCert = cert_begin + cert + end_cert;
|
||||
}
|
||||
X509Certificate certificate = null;
|
||||
try {
|
||||
certificate = convertToX509Cert(pemCert);
|
||||
} catch (Exception e) {
|
||||
throw new SydApiException( 0xC101, e );
|
||||
}
|
||||
return certificate.getSubjectDN().toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断 p7 是否是国密证书签的
|
||||
*
|
||||
|
||||
@@ -1,107 +0,0 @@
|
||||
package com.sunyard.util;
|
||||
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ConcurrentMap;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.locks.ReentrantLock;
|
||||
|
||||
/**
|
||||
* IP锁工具类 - 高并发安全实现
|
||||
*
|
||||
* 为每个IP地址提供唯一的可重入锁,确保同一IP的操作顺序执行
|
||||
*/
|
||||
public class IpLockUtils {
|
||||
|
||||
private static final ConcurrentMap<String, ReentrantLock> LOCK_MAP = new ConcurrentHashMap<>();
|
||||
|
||||
private static final Object CREATION_LOCK = new Object();
|
||||
|
||||
/**
|
||||
* 获取IP对应的锁(保证唯一性)
|
||||
* @param ip IP地址
|
||||
* @return 可重入锁实例
|
||||
*/
|
||||
public static ReentrantLock getLockForIp(String ip) {
|
||||
ReentrantLock lock = LOCK_MAP.get(ip);
|
||||
if (lock != null) {
|
||||
return lock;
|
||||
}
|
||||
|
||||
synchronized (CREATION_LOCK) {
|
||||
// 双重检查
|
||||
lock = LOCK_MAP.get(ip);
|
||||
if (lock == null) {
|
||||
lock = new ReentrantLock(true); // 公平锁
|
||||
LOCK_MAP.put(ip, lock);
|
||||
}
|
||||
return lock;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 安全加锁(带超时机制)
|
||||
* @param ip IP地址
|
||||
* @param timeout 超时时间
|
||||
* @param unit 时间单位
|
||||
* @return 是否成功获取锁
|
||||
* @throws InterruptedException
|
||||
*/
|
||||
public static boolean lockWithTimeout(String ip, long timeout, TimeUnit unit)
|
||||
throws InterruptedException {
|
||||
|
||||
ReentrantLock lock = getLockForIp(ip);
|
||||
return lock.tryLock(timeout, unit);
|
||||
}
|
||||
|
||||
/**
|
||||
* 解锁指定IP的锁
|
||||
* @param ip IP地址
|
||||
*/
|
||||
public static void unlockForIp(String ip) {
|
||||
ReentrantLock lock = LOCK_MAP.get(ip);
|
||||
if (lock != null && lock.isHeldByCurrentThread()) {
|
||||
lock.unlock();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 清理未使用的锁(可选)
|
||||
*/
|
||||
public static void cleanupUnusedLocks() {
|
||||
LOCK_MAP.entrySet().removeIf(entry ->
|
||||
!entry.getValue().isLocked() &&
|
||||
entry.getValue().getQueueLength() == 0
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前锁数量
|
||||
*/
|
||||
public static int getLockCount() {
|
||||
return LOCK_MAP.size();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取IP锁状态
|
||||
* @param ip IP地址
|
||||
* @return 锁状态字符串
|
||||
*/
|
||||
public static String getLockStatus(String ip) {
|
||||
ReentrantLock lock = LOCK_MAP.get(ip);
|
||||
if (lock == null) {
|
||||
return "No lock exists";
|
||||
}
|
||||
|
||||
return String.format("Locked: %s, Queue: %d, HoldCount: %d",
|
||||
lock.isLocked(), lock.getQueueLength(), lock.getHoldCount());
|
||||
}
|
||||
|
||||
/**
|
||||
* 重置所有锁
|
||||
*/
|
||||
public static void reset() {
|
||||
synchronized (CREATION_LOCK) {
|
||||
LOCK_MAP.clear();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,140 +0,0 @@
|
||||
package com.sunyard.util;
|
||||
|
||||
import com.google.zxing.*;
|
||||
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
|
||||
import com.google.zxing.client.j2se.MatrixToImageWriter;
|
||||
import com.google.zxing.common.BitMatrix;
|
||||
import com.google.zxing.common.HybridBinarizer;
|
||||
import com.google.zxing.qrcode.QRCodeReader;
|
||||
import com.sunyard.SydApiException;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.Hashtable;
|
||||
|
||||
public class QRCodeUtil {
|
||||
|
||||
public static void genQRCode(String data,String filepath){
|
||||
// 图片的尺寸(宽度和高度)
|
||||
int width = 300;
|
||||
int height = 300;
|
||||
|
||||
// 设置二维码的相关参数
|
||||
Hashtable<EncodeHintType, Object> hintMap = new Hashtable<>();
|
||||
hintMap.put(EncodeHintType.MARGIN, 1); // 设置二维码的空白边距
|
||||
|
||||
try {
|
||||
// 创建二维码矩阵
|
||||
BitMatrix bitMatrix = new MultiFormatWriter().encode(
|
||||
data,
|
||||
BarcodeFormat.QR_CODE,
|
||||
width,
|
||||
height,
|
||||
hintMap
|
||||
);
|
||||
|
||||
// 将二维码矩阵转换为图片,并保存
|
||||
File outputFile = new File(filepath);
|
||||
MatrixToImageWriter.writeToFile(bitMatrix, "PNG", outputFile);
|
||||
|
||||
} catch (Exception e) {
|
||||
System.err.println("Error occurred while generating QR code: " + e.getMessage());
|
||||
throw new SydApiException(1001,e);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public static void genBarCode(String data,String filepath){
|
||||
// 图片的尺寸(宽度和高度)
|
||||
int width = 300;
|
||||
int height = 300;
|
||||
|
||||
// 设置二维码的相关参数
|
||||
Hashtable<EncodeHintType, Object> hintMap = new Hashtable<>();
|
||||
hintMap.put(EncodeHintType.MARGIN, 1); // 设置二维码的空白边距
|
||||
|
||||
try {
|
||||
// 生成 Code 128 条形码
|
||||
BitMatrix bitMatrix= new MultiFormatWriter().encode(
|
||||
data,
|
||||
BarcodeFormat.PDF_417,
|
||||
width,
|
||||
height,
|
||||
hintMap
|
||||
);
|
||||
|
||||
// 将二维码矩阵转换为图片,并保存
|
||||
File outputFile = new File(filepath);
|
||||
MatrixToImageWriter.writeToFile(bitMatrix, "PNG", outputFile);
|
||||
|
||||
} catch (Exception e) {
|
||||
System.err.println("Error occurred while generating QR code: " + e.getMessage());
|
||||
throw new SydApiException(1001,e);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public static String readQRCode(String filepath){
|
||||
// 加载二维码图像
|
||||
File qrCodeImage = new File(filepath);
|
||||
|
||||
// 读取二维码图像
|
||||
BufferedImage bufferedImage = null;
|
||||
try {
|
||||
bufferedImage = ImageIO.read(qrCodeImage);
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
// 使用 ZXing 的 QRCodeReader 进行解码
|
||||
QRCodeReader reader = new QRCodeReader();
|
||||
LuminanceSource source = new BufferedImageLuminanceSource(bufferedImage);
|
||||
BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
|
||||
|
||||
try {
|
||||
// 解码二维码
|
||||
Result result = reader.decode(bitmap);
|
||||
|
||||
// 提取二维码中的数据
|
||||
return result.getText();
|
||||
|
||||
} catch (NotFoundException e) {
|
||||
throw new SydApiException(1003,e);
|
||||
} catch (ChecksumException e) {
|
||||
throw new SydApiException(1004,e);
|
||||
} catch (FormatException e) {
|
||||
throw new SydApiException(1005,e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static String readBarCode(String filepath){
|
||||
// 加载二维码图像
|
||||
File BarCodeImage = new File(filepath);
|
||||
|
||||
try {
|
||||
// 读取条形码图像
|
||||
BufferedImage bufferedImage = ImageIO.read(BarCodeImage);
|
||||
|
||||
// 使用 ZXing 的 MultiFormatReader 进行解码
|
||||
MultiFormatReader reader = new MultiFormatReader();
|
||||
LuminanceSource source = new BufferedImageLuminanceSource(bufferedImage);
|
||||
BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
|
||||
|
||||
// 解码条形码
|
||||
Result result = reader.decode(bitmap);
|
||||
|
||||
// 提取条形码中的数据
|
||||
return result.getText();
|
||||
} catch (NotFoundException e) {
|
||||
throw new SydApiException(1006,e);
|
||||
} catch (IOException e) {
|
||||
throw new SydApiException(1007,e);
|
||||
}
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,116 +0,0 @@
|
||||
import com.sunyard.snmp.SnmpTrapSender;
|
||||
import com.sunyard.task.AsyncTaskExecutor;
|
||||
import com.sunyard.task.TaskContext;
|
||||
import com.sunyard.task.TaskOutcome;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.time.Duration;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.function.Supplier;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class SimpleTest {
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
// testt();
|
||||
testSnmp();
|
||||
}
|
||||
|
||||
public static void testt() {
|
||||
|
||||
AsyncTaskExecutor executor = new AsyncTaskExecutor();
|
||||
// 使用示例
|
||||
List<TaskContext<String>> tasks = Arrays.asList(
|
||||
createTaskContext("1", 1000, "cert"),
|
||||
createTaskContext("2", 1000, "cert"),
|
||||
createTaskContext("3", 1000, "cert"),
|
||||
createTaskContext("4", 1000, "cert")
|
||||
);
|
||||
|
||||
List<TaskOutcome<String>> outcomes = executor.execBatchTasks(tasks);
|
||||
executor.shutdown();
|
||||
// 分离成功失败
|
||||
List<String> successes = outcomes.stream()
|
||||
.filter(TaskOutcome::isSuccess)
|
||||
.map(TaskOutcome::getResult)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
List<TaskOutcome<String>> failures = outcomes.stream()
|
||||
.filter(out -> !out.isSuccess())
|
||||
.collect(Collectors.toList());
|
||||
String result = "[" + failures.stream()
|
||||
.map(p -> p.getContext().getAddress())
|
||||
.collect(Collectors.joining(",")) + "]";
|
||||
String message = "信雅达签名服务器:" + result + ",证书: " + "cert" + ",导入失败";
|
||||
System.out.println(message);
|
||||
System.out.println("成功节点: " + successes);
|
||||
System.out.println("失败详情: ");
|
||||
failures.forEach(f ->
|
||||
System.out.println(f.getContext().getAddress() + ": " + f.getError().getMessage())
|
||||
);
|
||||
}
|
||||
|
||||
private static TaskContext<String> createTaskContext(String address, int timeout, String cert) {
|
||||
Supplier<String> task = () -> importS(address);
|
||||
return new TaskContext<>(task, 2, Duration.ofSeconds(1), address);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static void test() throws InterruptedException {
|
||||
List<String> addressList = new ArrayList<>();
|
||||
addressList.add("1");
|
||||
addressList.add("2");
|
||||
addressList.add("3");
|
||||
addressList.add("4");
|
||||
addressList.add("6");
|
||||
CompletableFuture<String>[] futures = new CompletableFuture[addressList.size()];
|
||||
for(int i = 0; i < addressList.size(); i++){
|
||||
int finalI = i;
|
||||
futures[i] = CompletableFuture.supplyAsync(() -> {
|
||||
return importS(addressList.get(finalI));
|
||||
});
|
||||
}
|
||||
// Thread.sleep(2000);
|
||||
//汇总失败的任务
|
||||
List<String> failedTasks = new ArrayList<>();
|
||||
for(int i = 0; i < futures.length; i++){
|
||||
if(futures[i].isCompletedExceptionally()){
|
||||
failedTasks.add(addressList.get(i));
|
||||
}
|
||||
}
|
||||
for (String s : failedTasks) {
|
||||
System.out.println(s);
|
||||
try {
|
||||
String path = "/Users/waner/Work" + "/" + s + ".txt";
|
||||
File file = new File(path);
|
||||
file.createNewFile();
|
||||
} catch (Exception e) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static String importS(String s){
|
||||
// System.out.println("handle:" + s);
|
||||
if (Integer.parseInt(s) % 2 == 0) {
|
||||
System.out.println("handle1:" + s);
|
||||
throw new RuntimeException();
|
||||
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
public static void testSnmp() throws IOException {
|
||||
Map<String, String> map = new HashMap<>();
|
||||
map.put("snmp.target.ip", "172.16.18.113");
|
||||
map.put("snmp.target.port", "162");
|
||||
map.put("enterprise.oid", "11");
|
||||
map.put("snmp.community", "public");
|
||||
map.put("snmp.version", "1");
|
||||
// SnmpTrapSender.getInstance().loadConfig(map);
|
||||
// SnmpTrapSender.getInstance().sendTrap("serve ip[127.0.0.1], import cert failed", 1);
|
||||
}
|
||||
}
|
||||
@@ -1,54 +0,0 @@
|
||||
import org.snmp4j.CommunityTarget;
|
||||
import org.snmp4j.PDU;
|
||||
import org.snmp4j.Snmp;
|
||||
import org.snmp4j.TransportMapping;
|
||||
import org.snmp4j.mp.SnmpConstants;
|
||||
import org.snmp4j.smi.Address;
|
||||
import org.snmp4j.smi.GenericAddress;
|
||||
import org.snmp4j.smi.OID;
|
||||
import org.snmp4j.smi.OctetString;
|
||||
import org.snmp4j.smi.UdpAddress;
|
||||
import org.snmp4j.smi.VariableBinding;
|
||||
import org.snmp4j.transport.DefaultUdpTransportMapping;
|
||||
|
||||
public class SnmpTrapSenderV2c {
|
||||
|
||||
public static void main(String[] args) {
|
||||
try {
|
||||
// 1. 创建SNMP对象并监听
|
||||
TransportMapping<?> transport = new DefaultUdpTransportMapping();
|
||||
Snmp snmp = new Snmp(transport);
|
||||
transport.listen();
|
||||
|
||||
// 2. 创建目标地址
|
||||
Address targetAddress = new UdpAddress("172.16.18.50/162"); // 接收方的IP和端口
|
||||
CommunityTarget target = new CommunityTarget();
|
||||
target.setCommunity(new OctetString("public")); // 社区字符串
|
||||
target.setAddress(targetAddress);
|
||||
target.setVersion(SnmpConstants.version2c);
|
||||
target.setTimeout(3000);
|
||||
target.setRetries(1);
|
||||
|
||||
// 3. 创建PDU(协议数据单元)
|
||||
PDU pdu = new PDU();
|
||||
|
||||
// 必须的系统信息
|
||||
pdu.add(new VariableBinding(SnmpConstants.sysUpTime, new OctetString("12345")));
|
||||
pdu.add(new VariableBinding(SnmpConstants.snmpTrapOID, new OID("1.3.6.1.6.3.1.1.5.3")));
|
||||
|
||||
// 添加自定义变量绑定(可选)
|
||||
pdu.add(new VariableBinding(new OID("1.3.6.1.2.1.1.1.0"), new OctetString("My Device")));
|
||||
pdu.add(new VariableBinding(new OID("1.3.6.1.2.1.1.5.0"), new OctetString("Critical Error")));
|
||||
|
||||
pdu.setType(PDU.TRAP);
|
||||
|
||||
// 4. 发送Trap
|
||||
snmp.send(pdu, target);
|
||||
System.out.println("SNMPv2c Trap 发送成功");
|
||||
|
||||
snmp.close();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -22,7 +22,7 @@ public class CertTest {
|
||||
public static void main(String[] args) {
|
||||
//System.setProperty("com.sunyard.sydapi4j.debug", "true");
|
||||
|
||||
SydApi4j api = (SydApi4j) new SydApi4j().connect("172.16.18.5", 8889, null, 1000);
|
||||
SydApi4j api = (SydApi4j) new SydApi4j().connect("192.168.1.129", 8889, null, 1000);
|
||||
try{
|
||||
List<String>dns = api.getAllCert();
|
||||
System.out.println(Arrays.toString( dns.toArray() ) );
|
||||
|
||||
@@ -1,134 +0,0 @@
|
||||
package sample;
|
||||
|
||||
import com.google.zxing.*;
|
||||
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
|
||||
import com.google.zxing.client.j2se.MatrixToImageWriter;
|
||||
import com.google.zxing.common.BitMatrix;
|
||||
import com.google.zxing.common.HybridBinarizer;
|
||||
import com.google.zxing.qrcode.QRCodeReader;
|
||||
import org.junit.Test;
|
||||
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.Hashtable;
|
||||
|
||||
public class EasyPDF {
|
||||
|
||||
|
||||
@Test
|
||||
public void test2(){
|
||||
String qrCodeText = "12345678";
|
||||
|
||||
// 图片输出路径
|
||||
String filePath = "./QRCode.png";
|
||||
String filePath2 = "./Code.png";
|
||||
|
||||
// 图片的尺寸(宽度和高度)
|
||||
int width = 300;
|
||||
int height = 300;
|
||||
|
||||
// 设置二维码的相关参数
|
||||
Hashtable<EncodeHintType, Object> hintMap = new Hashtable<>();
|
||||
hintMap.put(EncodeHintType.MARGIN, 1); // 设置二维码的空白边距
|
||||
|
||||
try {
|
||||
// 创建二维码矩阵
|
||||
BitMatrix bitMatrix = new MultiFormatWriter().encode(
|
||||
qrCodeText,
|
||||
BarcodeFormat.QR_CODE,
|
||||
width,
|
||||
height,
|
||||
hintMap
|
||||
);
|
||||
|
||||
|
||||
//生成条形码
|
||||
|
||||
// 生成 Code 128 条形码
|
||||
BitMatrix bitMatrix2= new MultiFormatWriter().encode(
|
||||
qrCodeText,
|
||||
BarcodeFormat.CODE_128,
|
||||
width,
|
||||
height,
|
||||
hintMap
|
||||
);
|
||||
|
||||
// 将二维码矩阵转换为图片,并保存
|
||||
File outputFile = new File(filePath);
|
||||
|
||||
File outputFile2 = new File(filePath2);
|
||||
MatrixToImageWriter.writeToFile(bitMatrix, "PNG", outputFile);
|
||||
MatrixToImageWriter.writeToFile(bitMatrix2, "PNG", outputFile2);
|
||||
|
||||
System.out.println("QR Code has been generated successfully!");
|
||||
} catch (Exception e) {
|
||||
System.err.println("Error occurred while generating QR code: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void test3(){
|
||||
// 加载二维码图像
|
||||
File qrCodeImage = new File("./QRCode.png");
|
||||
|
||||
// 读取二维码图像
|
||||
BufferedImage bufferedImage = null;
|
||||
try {
|
||||
bufferedImage = ImageIO.read(qrCodeImage);
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
// 使用 ZXing 的 QRCodeReader 进行解码
|
||||
QRCodeReader reader = new QRCodeReader();
|
||||
LuminanceSource source = new BufferedImageLuminanceSource(bufferedImage);
|
||||
BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
|
||||
|
||||
try {
|
||||
// 解码二维码
|
||||
Result result = reader.decode(bitmap);
|
||||
|
||||
// 提取二维码中的数据
|
||||
String qrCodeData = result.getText();
|
||||
System.out.println("QR Code Data: " + qrCodeData);
|
||||
} catch (NotFoundException e) {
|
||||
System.out.println("QR Code could not be read.");
|
||||
} catch (ChecksumException e) {
|
||||
throw new RuntimeException(e);
|
||||
} catch (FormatException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void test4(){
|
||||
// 条形码图片文件路径
|
||||
File barcodeImage = new File("./Code.png");
|
||||
|
||||
try {
|
||||
// 读取条形码图像
|
||||
BufferedImage bufferedImage = ImageIO.read(barcodeImage);
|
||||
|
||||
// 使用 ZXing 的 MultiFormatReader 进行解码
|
||||
MultiFormatReader reader = new MultiFormatReader();
|
||||
LuminanceSource source = new BufferedImageLuminanceSource(bufferedImage);
|
||||
BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
|
||||
|
||||
// 解码条形码
|
||||
Result result = reader.decode(bitmap);
|
||||
|
||||
// 提取条形码中的数据
|
||||
String barcodeData = result.getText();
|
||||
System.out.println("Barcode Data: " + barcodeData);
|
||||
} catch (NotFoundException e) {
|
||||
System.out.println("Barcode could not be read.");
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,91 +0,0 @@
|
||||
package sample;
|
||||
|
||||
import com.sunyard.RetWrap;
|
||||
import com.sunyard.proto.Util;
|
||||
import com.sunyard.util.ASN1Util;
|
||||
import com.sunyard.util.CertUtil;
|
||||
import org.bouncycastle.asn1.ASN1Sequence;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.security.NoSuchProviderException;
|
||||
import java.security.cert.CertificateException;
|
||||
import java.security.cert.X509Certificate;
|
||||
|
||||
import static org.bouncycastle.cms.SydCmsUtil.readContentInfo;
|
||||
|
||||
public class GetHash {
|
||||
public static void main(String[] args) throws IOException, CertificateException, NoSuchProviderException {
|
||||
String sign = "MIIGyQYJKoZIhvcNAQcCoIIGujCCBrYCAQExCzAJBgUrDgMCGgUAMAsGCSqGSIb3DQEHAaCCBSMwggUfMIIEB6ADAgECAhBzC3UOpXNEkLmQ8Ik7KKxGMA0GCSqGSIb3DQEBCwUAMDMxCzAJBgNVBAYTAkNOMREwDwYDVQQKDAhVbmlUcnVzdDERMA8GA1UEAwwIU0hFQ0EgRzIwHhcNMjMwODExMDkyNTM3WhcNMjYwODExMTU1OTU5WjCB+zFOMEwGA1UEAwxF5rWL6K+V5Lit5Zu95bel5ZWG6ZO26KGM6IKh5Lu95pyJ6ZmQ5YWs5Y+45LiK5rW35biC5YiG6KGM77yI5Zu95bqT77yJMTwwOgYDVQQLDDPkuK3lm73lt6XllYbpk7booYzogqHku73mnInpmZDlhazlj7jkuIrmtbfluILliIbooYwxPDA6BgNVBAoMM+S4reWbveW3peWVhumTtuihjOiCoeS7veaciemZkOWFrOWPuOS4iua1t+W4guWIhuihjDEPMA0GA1UEBwwG5LiK5rW3MQ8wDQYDVQQIDAbkuIrmtbcxCzAJBgNVBAYTAkNOMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3mAyAJ+oeuJR81T6f60FquoOsCy5woSuTrTLlAiEh430jsiJ0OW+fH38NMRmLKZYRt+SonElr3/q40j4S/VOpmIFjeX3qrDL5rHu52yBW8q+c3WM5veCDIOROS8+Cnj7UrTnLt8AIsZr0XWVNTszM0XS4a/wkVWMqkBipgZdCgGqCZ5IIdBGpehxTqfr7nuPdQPvcySZBynOrbGZFki+VsYBc9cHLORLZmnH/WmmDH02XJCfRXiE5SKLnLSvSvyqgNDJd5PEz9FqeYKZwQ9F1xZj13zyhwy8Z1WOjufxWFDCXd5X8lIZP3aprsFsU/04/DSb0mgroU4qT66rV24NhQIDAQABo4IBZDCCAWAwFAYDVR0lBA0wCwYJKoZIhvcvAQEFMH0GCCsGAQUFBwEBBHEwbzA4BggrBgEFBQcwAYYsaHR0cDovL29jc3AzLnNoZWNhLmNvbS9vY3NwL3NoZWNhL3NoZWNhLm9jc3AwMwYIKwYBBQUHMAKGJ2h0dHA6Ly9sZGFwMi5zaGVjYS5jb20vcm9vdC9zaGVjYWcyLmRlcjAfBgNVHSMEGDAWgBRWiN7jGEOCt3KkJutEqWLQh8SsJjAdBgNVHQ4EFgQUh48kzFu1UiU4IVgXQtmAhlVi3dowDgYDVR0PAQH/BAQDAgbAMAwGA1UdEwEB/wQCMAAwIgYDVR0gBBswGTAKBggqgRyG7zoBAzALBgkqgRyG7zoBAgQwRwYDVR0fBEAwPjA8oDqgOIY2aHR0cDovL2xkYXAyLnNoZWNhLmNvbS9DQTIwMDExL1JBMTIwNTAxMDAvQ1JMOTk0NzAuY3JsMA0GCSqGSIb3DQEBCwUAA4IBAQBbgeI5zAxrONyaPojaN6tIenPMXjOsem/C7dMZ7qBgAum2dQvxcFFB2mrwWquhpwklMdqEwFMW8fT4KpTelEC1oJh6X5+MmeCIj/zQy6X/Gd8EuwfYbbhSy745qrtlY90UgOrD9bXZ1yBSRDpC5lRB1AG00o5nqqvhee3RQxkmq3BSm4FSGzBETXz3fdfmTM9+7ZW6dK+zyKO4lrYjLTgc6K3tex9RB1hnlYjlDDrniB2qEDP76oRkctlCi1YNNn0gNBBaLlIKCu9JcodSy9tVaUyFDe4Rql7NbJX+EIbrUo41VbeB/HeMC5Ay5DZ+8JwxEnpqBBv2vPPseY6epiLLMYIBbjCCAWoCAQEwRzAzMQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxETAPBgNVBAMMCFNIRUNBIEcyAhBzC3UOpXNEkLmQ8Ik7KKxGMAkGBSsOAwIaBQAwDQYJKoZIhvcNAQEBBQAEggEARpoVnaitTgpMe9vsxbFjsVKBKtepqZVkVN4Qofs8n1Zkg7xOB7PYGCFjDG1jXFCWGr9PtwA5eWujPRIsjvFz9TD2cGrMI1ncXd1lWR9DfndqJIzT5TK8cvUnUYt25wyiOrD/ON1xGWBTSXwP72QfMAPU61aMrCQbe+EaVqnpsEncq8No2hPYtoRIt0z20jvESIbvUOjQgZ46zCyU0o1Vz2CyFVyAu4RTQbo3gq6nMGNOysp7rAF8RvCuU3RGi0nmRtLILWWsala1I5Y+3PAiSG6yzJJbgh37jnBffDP7CoEXbklUttJ0asO59BAE+4r8JZJZksx/i6WIu0BM7/jW9A==";
|
||||
RetWrap retWrap = ASN1Util.takeOutOriginDataFromPKCS7Sign(sign);
|
||||
String cert =(String) retWrap.get("cert");
|
||||
System.out.println(cert);
|
||||
|
||||
String pemCert = null;
|
||||
if(cert.contains("-----BEGIN CERTIFICATE-----")){
|
||||
pemCert =cert;
|
||||
}else {
|
||||
String cert_begin = "-----BEGIN CERTIFICATE-----\n";
|
||||
String end_cert = "\n-----END CERTIFICATE-----";
|
||||
pemCert = cert_begin + cert + end_cert;
|
||||
}
|
||||
|
||||
System.out.println(pemCert);
|
||||
|
||||
|
||||
X509Certificate certificate = CertUtil.convertToX509Cert(pemCert);
|
||||
String sigAlgName = certificate.getSigAlgName();
|
||||
System.out.println(sigAlgName);
|
||||
System.out.println(sigAlgName.toUpperCase().contains("SHA1"));
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getDn() throws CertificateException, NoSuchProviderException {
|
||||
String cert = "-----BEGIN CERTIFICATE-----\n" +
|
||||
"MIIFNzCCBB+gAwIBAgIQewelBvoQTWilE9UF5pwiBDANBgkqhkiG9w0BAQsFADAz\n" +
|
||||
"MQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxETAPBgNVBAMMCFNIRUNB\n" +
|
||||
"IEcyMB4XDTIzMDkwNzA3NTQ1MloXDTI2MDkwNzE1NTk1OVowge8xQjBABgNVBAMM\n" +
|
||||
"Oea1i+ivleS4reWbveWGnOS4mumTtuihjOiCoeS7veaciemZkOWFrOWPuOS4iua1\n" +
|
||||
"t+W4guWIhuihjDE8MDoGA1UECwwz5Lit5Zu95Yac5Lia6ZO26KGM6IKh5Lu95pyJ\n" +
|
||||
"6ZmQ5YWs5Y+45LiK5rW35biC5YiG6KGMMTwwOgYDVQQKDDPkuK3lm73lhpzkuJrp\n" +
|
||||
"k7booYzogqHku73mnInpmZDlhazlj7jkuIrmtbfluILliIbooYwxDzANBgNVBAcM\n" +
|
||||
"BuS4iua1tzEPMA0GA1UECAwG5LiK5rW3MQswCQYDVQQGEwJDTjCCASIwDQYJKoZI\n" +
|
||||
"hvcNAQEBBQADggEPADCCAQoCggEBAL6d0aFiewo3RkYA0sb3kMaH6bvlUNCw+FFN\n" +
|
||||
"ZMWwqFCt5K2FrwRkfZjtNWVuF6MXVBX605D/mML85+hbCrKs/Rj6rq3V3ur1mYja\n" +
|
||||
"2duNTBlT9WzrKSCdPP1ae9kSM8Fwde2w0tAGqn41kjQgn3nw8twPSqnG/mqDlzkV\n" +
|
||||
"OCwaZoxNqHouOCL3OYTATDOj48e9c4Q9In5NXbUFeu16JP8Y9SSlusfZof7v8umq\n" +
|
||||
"XlMfzIyw5tpA9hQGrBtmFRY41gM1j1JwO2/BjFtDVHDe4QxG2cmzc9T3YT2bN2+h\n" +
|
||||
"tSAEZKbOxY4G3AUlPhgkxEJuzdFEN1zpgctAUnrUmDTy4chk6W8CAwEAAaOCAYgw\n" +
|
||||
"ggGEMBQGA1UdJQQNMAsGCSqGSIb3LwEBBTB9BggrBgEFBQcBAQRxMG8wOAYIKwYB\n" +
|
||||
"BQUHMAGGLGh0dHA6Ly9vY3NwMy5zaGVjYS5jb20vb2NzcC9zaGVjYS9zaGVjYS5v\n" +
|
||||
"Y3NwMDMGCCsGAQUFBzAChidodHRwOi8vbGRhcDIuc2hlY2EuY29tL3Jvb3Qvc2hl\n" +
|
||||
"Y2FnMi5kZXIwHwYDVR0jBBgwFoAUVoje4xhDgrdypCbrRKli0IfErCYwHQYDVR0O\n" +
|
||||
"BBYEFK6AF/JiY5AhOi04JSg6KltgUy69MA4GA1UdDwEB/wQEAwIGwDAhBgkqgRyG\n" +
|
||||
"7zoLgVIEFBMSOTEzMTAwMDAxMzIyMDI1MjhMMAwGA1UdEwEB/wQCMAAwIgYDVR0g\n" +
|
||||
"BBswGTAKBggqgRyG7zoBAzALBgkqgRyG7zoBAgQwSAYDVR0fBEEwPzA9oDugOYY3\n" +
|
||||
"aHR0cDovL2xkYXAyLnNoZWNhLmNvbS9DQTIwMDExL1JBMTIwNTAxMDAvQ1JMMTAw\n" +
|
||||
"MDc0LmNybDANBgkqhkiG9w0BAQsFAAOCAQEAaNG0Zl2W4RlCM934eaZFp30Sj3kx\n" +
|
||||
"EHBtZ4x1FXrjS0Vq+Jzflcb+3lVhfmt/FiaPA+ShF1vxy0UOO9tszs3Wj8gWX6p8\n" +
|
||||
"W2uNaOdq9PCk6Y0N4x8U0LEzWGBj0dXfEK8UZxMrorzsZWN8LO1imUFVbu+WV+9M\n" +
|
||||
"eRP7RIF3Y9Ah8QCozMvzHk7z4JRMgRoe6GtE0ehevph93YFNdTamulLTjt5hZaFU\n" +
|
||||
"SFZL028+RVa7k2DhQetZuUdD1/DBLTrlz8DqGHYHptifDtZapPALGr4nx94YChMT\n" +
|
||||
"OsOvFugFTrtg0H3vWTRX4Al5mftx356VE8nt9A/6DYA7sGnFRKDPMoIPCg==\n" +
|
||||
"-----END CERTIFICATE-----\n";
|
||||
X509Certificate certificate = CertUtil.convertToX509Cert(cert);
|
||||
String sigAlgName = certificate.getSubjectDN().toString();
|
||||
System.out.println(sigAlgName);
|
||||
System.out.println(certificate.getSubjectDN().toString());
|
||||
System.out.println(sigAlgName.toUpperCase().contains("SHA1"));
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void getOID(){
|
||||
String sign = "MIIBOwYJKoZIhvcNAQcDoIIBLDCCASgCAQAxgdUwgdICAQAwQzA5MQswCQYDVQQGEwJDTjEOMAwGA1UECgwFR01TU0wxGjAYBgNVBAMMEU1pZGRsZUNBIGZvciBUZXN0AgYBkZGPx4AwCwYJKoEcz1UBgi0DBHsweQIgfLZlDgJJ9201wsYsQ9S4KNvOlgrX0WtZGPQBXPKRTG0CIQD2PthXQ7hHnxN287jAbHqQXaeDuVC3ohQ06Pv+eMzruQQgG8iD0R2vtl//q1JkdWjIwibgL3ZdNWkrJEEiNw2NqEkEEHT7hJTar0bnrKlE5BxCIJIwSwYKKoEcz1UGAQQCATAbBgcqgRzPVQFoBBAT1Kuxlcocuacphn3Iadr6gCB26bmHVsH8aQrj7tTACj2PmdMxALYkI2eUKmiJTH/96Q==";
|
||||
Object pkContent = readContentInfo( Util.decodeBase64(sign) );
|
||||
ASN1Sequence pkSeq = ASN1Sequence.getInstance( pkContent );
|
||||
|
||||
}
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -1,149 +0,0 @@
|
||||
package sample;
|
||||
|
||||
import com.sunyard.RetWrap;
|
||||
import com.sunyard.SydApi;
|
||||
import com.sunyard.proto.Util;
|
||||
import com.sunyard.util.CertUtil;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import racal.sunyard.main.SydApi4j;
|
||||
|
||||
import java.security.NoSuchProviderException;
|
||||
import java.security.Principal;
|
||||
import java.security.cert.CertificateException;
|
||||
import java.security.cert.X509Certificate;
|
||||
|
||||
/**
|
||||
* @Author:Cheney
|
||||
* @Date:2023/8/19 16:24
|
||||
*/
|
||||
public class Sample4P1 {
|
||||
private SydApi4j api;
|
||||
|
||||
final String SM2dn = "C=CN,O=CFCA TEST CA,OU=NCS2,OU=Enterprises,CN=041@Z402451000010@ShanDong@00000001";
|
||||
byte[] orgData = new byte[8000];
|
||||
@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);
|
||||
}
|
||||
|
||||
@After
|
||||
public void after() {
|
||||
try {
|
||||
this.api.disconnect();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
//sm2算法
|
||||
public void sm2sign(){
|
||||
/**
|
||||
* 正常证书 SM2 P1 裸签签名
|
||||
* @param orgData 原始数据
|
||||
* @param sm2Dn 签名者证书 DN
|
||||
* @return 裸签签名数据
|
||||
*/
|
||||
byte[] nakedSign = api.SYD_NakedSign(orgData,SM2dn);
|
||||
System.out.println("裸签名:"+Util.encodeBase64(nakedSign));
|
||||
|
||||
|
||||
/**
|
||||
* 使用指定的证书 DN,对指定的原始数据编制裸验签(遵循PKCS#1)
|
||||
* @param orgData 待签名的原始数据
|
||||
* @param sign 签名数据
|
||||
* @param sCertDN 签名者证书 DN
|
||||
* @return 验签是否通过
|
||||
*/
|
||||
boolean ver = api.SYD_NakedVerify(orgData, nakedSign,SM2dn );
|
||||
System.out.println("验签:"+ver);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getDn() throws CertificateException, NoSuchProviderException {
|
||||
String cert ="-----BEGIN CERTIFICATE-----\n" +
|
||||
"MIIFFzCCA/+gAwIBAgIQVZErQ4caem9EAi7zgWIlMzANBgkqhkiG9w0BAQsFADAz\n" +
|
||||
"MQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxETAPBgNVBAMMCFNIRUNB\n" +
|
||||
"IEcyMB4XDTI0MDMyNzAzMTUyNVoXDTI1MDMyNzE1NTk1OVowgb8xCzAJBgNVBAYT\n" +
|
||||
"AkNOMQ8wDQYDVQQIDAbkuIrmtbcxDzANBgNVBAcMBuS4iua1tzEqMCgGA1UECgwh\n" +
|
||||
"5Lit5Zu95Lq65rCR6ZO26KGM5LiK5rW35biC5YiG6KGMMSowKAYDVQQLDCHkuK3l\n" +
|
||||
"m73kurrmsJHpk7booYzkuIrmtbfluILliIbooYwxNjA0BgNVBAMMLea1i+ivleS4\n" +
|
||||
"reWbveS6uuawkemTtuihjOS4iua1t+W4guWIhuihjOetvuWQjTCCASIwDQYJKoZI\n" +
|
||||
"hvcNAQEBBQADggEPADCCAQoCggEBALqXQHI6GeefK4pu/KLVLZDvrjNjcAVKxr1m\n" +
|
||||
"Czu+uwhrMIdelr+72Tj+8tsC8dRdRKEti9lNZ2eKCiI56gKjg6nJiByhVnCju5No\n" +
|
||||
"jqiOyvhgIGl4TulDK9Oq1nTX3MuNfWJuwG9fsa749pBGvvdvXglkOeZTbZ9hrMJ7\n" +
|
||||
"ga4ft9vZZYTc8syPxJNnoPDCbDqiPBg9+U6ECI/6UZ4p7nV8Q8BaopkhKqqrpUQR\n" +
|
||||
"+sygk8V7QX7D3E1TDeoxwFHyNBKpBRonGI2DwfdpxG0aq916MGdoHSWcvu5XxpfO\n" +
|
||||
"nMf8Ur8qK7XO3F5pla8sbXeOesL8aNMw/f5/uM+Xt6YQPfKKs88CAwEAAaOCAZgw\n" +
|
||||
"ggGUMB8GA1UdIwQYMBaAFFaI3uMYQ4K3cqQm60SpYtCHxKwmMB0GA1UdDgQWBBSk\n" +
|
||||
"pQSgIAR1k1zPq9A6//h/892n2TAOBgNVHQ8BAf8EBAMCBsAwFAYDVR0lBA0wCwYJ\n" +
|
||||
"KoZIhvcvAQEFMCIGA1UdIAQbMBkwCgYIKoEchu86AQMwCwYJKoEchu86AQIEMAwG\n" +
|
||||
"A1UdEwEB/wQCMAAwWAYDVR0fBFEwTzBNoEugSYZHaHR0cDovL2xkYXAyLnNoZWNh\n" +
|
||||
"LmNvbS9hYzg4NDg2MC9kODQ4L2VjOGYvYjkzYTQ1ZTYvOTFjYTEzOTBhMmFlNWM3\n" +
|
||||
"MC5jcmwwfQYIKwYBBQUHAQEEcTBvMDgGCCsGAQUFBzABhixodHRwOi8vb2NzcDMu\n" +
|
||||
"c2hlY2EuY29tL29jc3Avc2hlY2Evc2hlY2Eub2NzcDAzBggrBgEFBQcwAoYnaHR0\n" +
|
||||
"cDovL2xkYXAyLnNoZWNhLmNvbS9yb290L3NoZWNhZzIuZGVyMCEGCSqBHIbvOguB\n" +
|
||||
"UgQUExIxMTMxMDAwMDAwMjQwNzIwWEowDQYJKoZIhvcNAQELBQADggEBALmYF/nZ\n" +
|
||||
"jed5UiqBpb8mA9xIxJRi4QD5c6Mmww3Ks9cLq72RiLQV0QG+sjApPHTOosRka0l7\n" +
|
||||
"oqUyQhMzATHFUW/cjFuYVLwjvSANNPVtxKJxHPe105DA+34CPxwd25DeMvhNsq5X\n" +
|
||||
"sEMiLVZacA9RD1pGI8KlmnA9SK7ZzN3yf1exMbVYb3LqQH9kW2BfBX83reewiF1N\n" +
|
||||
"1TlLDCsEd41pF20twpw6xWUKekXW7Tok0gR9c5+lpWH6gtZiQvFUp05VbbuVhmee\n" +
|
||||
"zGYX8e9202S7YYEY+A9+4CIN+u7JYbI88Zr2HY5RErTeDcZGHKD/3c2aPwaE1lFb\n" +
|
||||
"aEACH34c7sDBTTE=\n" +
|
||||
"-----END CERTIFICATE-----";
|
||||
String pemCert = null;
|
||||
if(cert.contains("-----BEGIN CERTIFICATE-----")){
|
||||
pemCert =cert;
|
||||
}else {
|
||||
String cert_begin = "-----BEGIN CERTIFICATE-----\n";
|
||||
String end_cert = "\n-----END CERTIFICATE-----";
|
||||
pemCert = cert_begin + cert + end_cert;
|
||||
}
|
||||
|
||||
System.out.println(pemCert);
|
||||
|
||||
X509Certificate certificate = CertUtil.convertToX509Cert(pemCert);
|
||||
String dn = certificate.getSubjectDN().toString();
|
||||
System.out.println(dn);
|
||||
;
|
||||
}
|
||||
|
||||
@Test
|
||||
public void ver(){
|
||||
SydApi4j api = (SydApi4j) new SydApi4j().connect("172.16.17.134", 8889, null, 1000);
|
||||
String data = "<root xmlns=\"namespace_string\"><MsgHeader><SndDt>2024-10-11T17:22:18</SndDt><MsgTp>farms.107.001.01</MsgTp><InstgId>B0000011000023</InstgId><SignSN>4032069546</SignSN><DgtlEnvlp>MHkCIQCRl/FXCJP7TriAhT6SLrN1GUb4o7tujxHC9j/UGJftOwIgSK/nzCTmNSrA1jYO9G/PiToSTptTCexEJ2o7QYOfwWgEIPs+BFe8v7K0DoyXCBf4drsWPzifKaVwPeQFOaK9IKkiBBD6NkgVbBVCeXLc2pzjA8OG</DgtlEnvlp><NcrptnSN>4067545618</NcrptnSN></MsgHeader><MsgBody><TrxId>2024101117215204292585511300101</TrxId><FnTp>21</FnTp><InstgId>B9999999999090</InstgId><InstdIdInfoList><InstdIdInfo><InstdId>C1020211000034</InstdId></InstdIdInfo></InstdIdInfoList><NtfyDtTm>2024-10-11T17:21:52</NtfyDtTm><DataTrTp>27</DataTrTp><DataCnttInfoList><DataCnttInfo><DataMn>01</DataMn><DataTp>03</DataTp><DataCntt>Wiwdanx6NtGjjUA+Qb5rbHddhfvAtT1fa8s6wgiqjamQCq3NWu5K4uYt/efuEXR7Alu6whWgMPjSQnn2/d0P1/I4N2F4m0kxy5HYSrQwpnB0x98zXvX/aDLvbcCY9zO5DyWUMpJhLv28NP0ikiXQEQChcp23C8MSWYZy1HaM/jaLWBuaLDvhiDaDvu9EC+T9GmOfbC2zgGaKZPnSMMXHvK1OVrTwKcvOe3xUsHkUY5FdPshrCIsyWH3PfH8Yc+CmPSf1b/iO5szOVmUgw6dXNqZ+3j3BJlitNvPTs4KeZtDgIT1MBa/yy6yPGw/h1NiWgqXBPvT6IwsxSMAqw4jQmFMfKJ7m9bXwi130lRVcI1/5KJtDf7CwuGnmnrKdVucJTAlqh8iUqs/zOgz0bnAbbayyqJsi/6ksTDrMjp/hFybiboSyG2L6+58yMwcI4zGZcZdbGwrftRxeq/ceTiF2mztDK4PtdXy9aqLrsazZyvvUiFDHOepZW1h4ccIA/NMOYK5WS5IgpXve4msLJlU5QVAqfntj1YsiITnwLoIsn6QjmrjmoMwOPLRg9kTGsxH/ScMpoTGE2wmXnYRR0PJxZ2Acm+LZlIneqaRQgv9wZ/l6Gf6A0Zb7nwdsjSjnvOIH13US8p3wbBBybHuzmgLhYJIVkvnA9TcP5PreN0+sLa3fLMkc1Xpxnkc5A/Zar0WfHb3MhXZeA1w8vzANBq5ocDygzqqSHzHlSgVZ6x85GbSPDMrCEsZb5NSODiyNWOfTAcV2cltlGsVlC+YF5mLySVojkwfhstMkoj7WoiG/ADf9vckBOLWmQvuh5289l/ih9hy+/uQ3SFBYVwi4m2CdYdSIUMc56llbWHhxwgD80w5YUNI59nZoVUGKwV+dBehsjwWHVVOoLGtLcJEbBpbDEdW9jL4I9oemSSXmEnoIjxhlnTMoKF22kYn8Q6ynmn5g/pJ+ziDqOcja8zRfM8vQk1SLvWmvnO8WiE/VR5B84xPVvYy+CPaHpkkl5hJ6CI8Y0ZAPQrsDF2A/udfY8pV+vLXpezGMoyLj/02lxtfTFpj11CjmHYjlrQAX8Vb1v4AN0PLwdz5ns3wTi+fj03B2p7y4Z5Cclp50sF4cInR4B7H6gq5CkUHFw3xLT6q1DjledSJ5EJNfSvl8WvU5MUEvwygNrWpYcvbqyOW70efoEYNrKpGy9T0RKDMuk5EsxLX++SibQ3+wsLhp5p6ynVbnCfOzW20qDzgYmqcSZ6Hq+1hSw/mTr3ZnncZuuqTY3TXKLcQOa7Q+iJQHayCwWs5R640GTv1ani1CBzywQXagLI/KPwecIfCCSJSIM//YNyttvxDm2Wk+TmJKU28CVOJXukiQyq0xnc8ac9LUZhkm+GDJQu0iJjkfwgeK3k6cfm30bGOhg0xAuvIcgWpmLVuKFiKKJuzMPpw6R5EpaYQMP7vsB5wjIpHr81iFHGAGRi8WkJWwQTxMBiSR303A1iRB1ncx76YhSDoZza851fEA80HizZy+fBanI5SQJx1K9kwaDYc+hfaWNqvERhE4sr9w1gzek5iyJsjiL2D1D/I/ahGAfJ5qvaEpr4yFp2TnS1yI1UDJLXBIX/clayNlMMHzIgiisfe5r2xcJYfWrNTJaXHywrBopfB8hA8MpXd8YnYxJDjnXBmo1fWgku9YegHmi0+V1pldLw7WA7BX3Ou2QoSIRsQiyclXPZylW6N1YavYxByGDxrXfzLIufJ8Od6lPFoPEbb9Nld2xfk7KUKUBX1dOLb77/ZiBlywTE21qvQy8sKwaKXwfIQPDKV3fGJ2MfrE711rH6xvO7lpfUXRMWGMfpCccB83/p5hclHeUIPzQx7BvXSDFxt1pq5AxKjmmd270zEz3ZYBxM/Hm/pxUrk=</DataCntt><EncrptnId>00</EncrptnId></DataCnttInfo><DataCnttInfo><DataMn>02</DataMn><DataTp>02</DataTp><DataCntt>{\"fileInfoList\":[{\"fileName\":\"FC_B9999999999090_C1020211000034_2024101117215204292585511300101.zip.sec\",\"idcList\":\"30\"}]}</DataCntt><EncrptnId>01</EncrptnId></DataCnttInfo><DataCnttInfo><DataMn>03</DataMn><DataTp>02</DataTp><DataCntt>{\"policeInnerId\":\"1111111111\",\"applicationId\":\"030100000FZ2024092409441727142255391\"}</DataCntt><EncrptnId>01</EncrptnId></DataCnttInfo></DataCnttInfoList><Desc></Desc></MsgBody></root>";
|
||||
//计算整个报文的hash值
|
||||
byte[] hash = api.SM3Hash(data.getBytes());
|
||||
|
||||
System.out.println("报文hash值hex:"+ Util.bytes2HexString(hash));
|
||||
//对hash值签名
|
||||
byte[] nakedSign = api.SYD_NakedSign(data.getBytes(),SM2dn);
|
||||
|
||||
boolean ver = api.SYD_NakedVerify(SM2dn,nakedSign, data.getBytes(),hash);
|
||||
|
||||
boolean ver2 = api.SYD_NakedVerify( data.getBytes(),nakedSign,SM2dn);
|
||||
System.out.println("验签结果:"+ver);
|
||||
|
||||
System.out.println("验签结果:"+ver2);
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1,119 +0,0 @@
|
||||
package sample;
|
||||
|
||||
import com.sunyard.RetWrap;
|
||||
import com.sunyard.SydApi;
|
||||
import com.sunyard.proto.Util;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import racal.sunyard.main.SydApi4j;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
/**
|
||||
* @Author:Cheney
|
||||
* @Date:2024/8/09 16:24
|
||||
*/
|
||||
public class SampleICBC {
|
||||
private SydApi4j api;
|
||||
|
||||
final String SM2dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1";
|
||||
byte[] orgData = "12345678123456".getBytes();
|
||||
@Before
|
||||
public void before() {
|
||||
// 通过设置debug的属性开启debug,如果不设置则默认不打开
|
||||
System.setProperty("com.sunyard.sydapi4j.debug", "true");
|
||||
|
||||
//通过设置不校验证书是否反序
|
||||
System.setProperty("com.sunyard.dnsort", "false");
|
||||
api = (SydApi4j) new SydApi4j().connect("172.16.17.232", 8889, null, 1000);
|
||||
}
|
||||
|
||||
@After
|
||||
public void after() {
|
||||
try {
|
||||
this.api.disconnect();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
//证书导入
|
||||
public void importCert(){
|
||||
String cert = "-----BEGIN CERTIFICATE-----\n" +
|
||||
"MIICMjCCAdWgAwIBAgIGAYqHSuwHMAwGCCqBHM9VAYN1BQAwSzELMAkGA1UEBhMC\n" +
|
||||
"Q04xDjAMBgNVBAoTBUdNU1NMMRAwDgYDVQQLEwdQS0kvU00yMRowGAYDVQQDExFN\n" +
|
||||
"aWRkbGVDQSBmb3IgVGVzdDAiGA8yMDIzMDkxMTE2MDAwMFoYDzIwMjQwOTExMTYw\n" +
|
||||
"MDAwWjBgMQswCQYDVQQGDAJDTjELMAkGA1UECAwCemoxCzAJBgNVBAcMAmh6MRAw\n" +
|
||||
"DgYDVQQKDAdzdW55YXJkMRAwDgYDVQQLDAd6eWhUZXN0MRMwEQYDVQQDDAp6eWhU\n" +
|
||||
"ZXN0U00yMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEYB3P271TUdDKfUr0VbkL\n" +
|
||||
"v+N6QlrYcfAqbqjgqHaa3Xt5/8n3rHXp5ILj8QdU1pCFOF6xaaCwg1L7oR90MHZe\n" +
|
||||
"GKOBiTCBhjAbBgNVHSMEFDASgBD5f1W0J5QzYqZWym/MXRr/MBkGA1UdDgQSBBAK\n" +
|
||||
"g03SZSfU07aY4XNDfVIOMDEGCCsGAQUFBwEBBCUwIzAhBggrBgEFBQcwAYYVaHR0\n" +
|
||||
"cHM6Ly9vY3NwLmdtc3NsLmNuMAkGA1UdEwQCMAAwDgYDVR0PAQH/BAQDAgDAMAwG\n" +
|
||||
"CCqBHM9VAYN1BQADSQAwRgIhAK1lDGV1UtbYz5Hf8DCpq8UySCtu5dguh/eZsc4c\n" +
|
||||
"V9PtAiEA5SO99BSunZMtrpHFJC1XbEQ5Xp0zIJQvzjRqZwfkyrw=\n" +
|
||||
"-----END CERTIFICATE-----\n";
|
||||
String dn = api.importCert(cert);
|
||||
System.out.println("返回证书主题:"+dn);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
//sm2算法 attach签名验签
|
||||
public void sm2signAtt(){
|
||||
String attachedSign = api.attachedSign(orgData, SM2dn);
|
||||
System.out.println("attach签名:"+attachedSign);
|
||||
|
||||
boolean attachedVerify = api.attachedVerify(attachedSign);
|
||||
System.out.println("attach验签:"+attachedVerify);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
//sm2数字信封加密解密
|
||||
public void sm2gen(){
|
||||
|
||||
String ivHex = "31323334353637383132333435363738";
|
||||
|
||||
/**
|
||||
* SM2数字信封生成
|
||||
* @param sm2Dn 证书DN
|
||||
* @param IV iv
|
||||
* @param orgData 原始数据
|
||||
* @param roundmod 轮模式 0 ECB 1 CBC
|
||||
* @return 加密后的数据
|
||||
*/
|
||||
RetWrap genByDn = api.generateDEByDnICBC(SM2dn, ivHex,orgData,1);
|
||||
String cipherKey = (String) genByDn.get(SydApi.RET_CIPHER_KEY);
|
||||
System.out.println("SM2数字信封: " +cipherKey);
|
||||
|
||||
/**
|
||||
* SM2数字信封解密
|
||||
* @param sm2Dn 证书DN
|
||||
* @param IV iv
|
||||
* @param cipherKey 数字信封
|
||||
* @param roundmod 轮模式 0 ECB 1 CBC
|
||||
* @return 加密后的数据
|
||||
*/
|
||||
RetWrap denSM2 = api.decryptDEByDNICBC( SM2dn,ivHex, cipherKey,1);
|
||||
byte[] oData = (byte[]) denSM2.get("oData");
|
||||
System.out.println("SM2信封解密:"+ new String(oData));
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getTIme(){
|
||||
|
||||
HashMap<String, String> certTime = api.getCertTime(SM2dn);
|
||||
System.out.println(certTime.get("after"));
|
||||
System.out.println(certTime.get("before"));
|
||||
|
||||
Util.bytes2HexString("aa".getBytes());
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@ 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";
|
||||
@@ -26,8 +26,8 @@ public class Shangqing {
|
||||
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("192.168.0.100", 8889, null, 1000);
|
||||
// api = (SydApi4j) new SydApi4j().connect("172.16.17.161", 8889, null, 1000);
|
||||
api = (SydApi4j) new SydApi4j().connect("192.168.0.100", 8889, null, 1000);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@ import java.util.List;
|
||||
|
||||
public class Test4Nongxin {
|
||||
|
||||
private static final String SM2dn = "C=CN,ST=zz,L=zz,O=zzz,CN=zzzzz";
|
||||
private static final String SM2dn = "C=CN,O=Sunyard,OU=8001,CN=8001";
|
||||
private static final String RSAdn = "C=cn,O=CFCA TEST CA,OU=NCS2,OU=Enterprises,CN=041@Z402451000010@ShanDong@00000001";
|
||||
private static final byte[] orgData = new byte[ 2*1024 ];
|
||||
private static final byte[] orgDataBig = new byte[ 10*1024 ];
|
||||
@@ -25,7 +25,7 @@ public class Test4Nongxin {
|
||||
System.setProperty("com.sunyard.sydapi4j.debug", "true");
|
||||
System.setProperty("com.sunyard.dnsort", "true");
|
||||
//设置连接
|
||||
SydApiBuilder builder = new SydApiBuilder().setIp("172.1.41.139");
|
||||
SydApiBuilder builder = new SydApiBuilder().setIp("192.168.0.200");
|
||||
SydApi4j api = (SydApi4j) builder.build();
|
||||
try {
|
||||
//SM2裸签
|
||||
@@ -209,7 +209,7 @@ public class Test4Nongxin {
|
||||
System.setProperty("com.sunyard.sydapi4j.debug", "true");
|
||||
|
||||
//设置连接
|
||||
SydApiBuilder builder = new SydApiBuilder().setIp("172.16.17.64");
|
||||
SydApiBuilder builder = new SydApiBuilder().setIp("192.168.0.156");
|
||||
SydApi4j api = (SydApi4j) builder.build();
|
||||
|
||||
String cert = "-----BEGIN CERTIFICATE-----\n" +
|
||||
|
||||
@@ -1,370 +0,0 @@
|
||||
package sample;
|
||||
|
||||
import cn.hutool.core.date.StopWatch;
|
||||
import cn.hutool.core.date.Week;
|
||||
import com.google.gson.Gson;
|
||||
import com.sunyard.SydApiException;
|
||||
import com.sunyard.proto.Util;
|
||||
import com.sunyard.snmp.SnmpTrapSender;
|
||||
import com.sunyard.util.IpLockUtils;
|
||||
import org.bouncycastle.util.encoders.Hex;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import racal.sunyard.main.SydApi4j;
|
||||
|
||||
import java.security.cert.X509Certificate;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.*;
|
||||
|
||||
import static com.sunyard.util.CertUtil.convertToX509Cert;
|
||||
|
||||
public class Test4NongxinCW {
|
||||
|
||||
private SydApi4j api;
|
||||
|
||||
final String SM2dn = "C=CN,ST=zz,L=zz,O=zzz,CN=zzzzz";
|
||||
|
||||
byte[] orgData = new byte[100];
|
||||
|
||||
@Before
|
||||
public void before() {
|
||||
//主备调用接口
|
||||
SydApi4j.SYD_Set_Parameter_HA("172.1.41.96", "172.1.41.139", 8889, 1000);
|
||||
api = (SydApi4j) new SydApi4j();
|
||||
// api.startHeartbeat();
|
||||
|
||||
// 通过设置debug的属性开启debug,如果不设置则默认不打开
|
||||
// api = (SydApi4j) new SydApi4j().connect("172.1.41.139", 8891, null, 1000);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void connection() {
|
||||
|
||||
}
|
||||
|
||||
@After
|
||||
public void after() {
|
||||
try {
|
||||
this.api.disconnect();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testHA() {
|
||||
|
||||
for (int i = 0; i < 10000; i++) {
|
||||
byte[] nakedSign = api.SYD_NakedSign(orgData,SM2dn);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void tes() throws InterruptedException, ExecutionException {
|
||||
// 配置HA参数
|
||||
// SydApi4j.SYD_Set_Parameter_HA("172.1.41.139", "172.1.41.96", 8889, 1000);
|
||||
|
||||
// 创建20个线程并发操作API
|
||||
ExecutorService executor = Executors.newFixedThreadPool(20);
|
||||
List<Future<?>> futures = new ArrayList<>();
|
||||
|
||||
// 模拟主节点故障
|
||||
CountDownLatch startLatch = new CountDownLatch(1);
|
||||
|
||||
for (int i = 0; i < 20; i++) {
|
||||
futures.add(executor.submit(() -> {
|
||||
try {
|
||||
startLatch.await(); // 等待统一开始
|
||||
} catch (InterruptedException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
SydApi4j api2 = new SydApi4j();
|
||||
|
||||
for (int j = 0; j < 10000; j++) {
|
||||
byte[] nakedSign = api2.SYD_NakedSign(orgData,SM2dn);
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
// 触发所有线程开始
|
||||
startLatch.countDown();
|
||||
|
||||
// 随机触发主节点故障(模拟网络中断)
|
||||
Thread.sleep(500);
|
||||
|
||||
// 等待所有任务完成
|
||||
for (Future<?> future : futures) {
|
||||
future.get();
|
||||
}
|
||||
|
||||
executor.shutdown();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void nakeSign(){
|
||||
|
||||
// String SM2dn1 = "C=CN,ST=3,L=3,O=3,OU=3,OU=3,CN=3";
|
||||
// orgData = Hex.decode("80a370b809e8a46ba51211a35d6f0180fea32b4acc97916bc9c517ea6651134c");
|
||||
// byte[] nakedSign1 = api.SYD_NakedSign(SM2dn, (byte[])null, orgData);
|
||||
// System.out.println("SM2签名:"+ Util.bytes2HexString(nakedSign1));
|
||||
orgData = new byte[4096];
|
||||
//裸签
|
||||
byte[] nakedSign = api.SYD_NakedSign(orgData,SM2dn);
|
||||
System.out.println("SM2签名:"+ Util.bytes2HexString(nakedSign));
|
||||
//裸签验签
|
||||
boolean ver = api.SYD_NakedVerify(orgData,nakedSign, SM2dn);
|
||||
System.out.println("SM2验签:"+ ver);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void rsaSign() {
|
||||
String RSAdn = "C=CN,ST=3,L=3,O=3,OU=3,OU=3,CN=3";
|
||||
byte[] nakedSign = api.SYD_NakedSign(1, RSAdn,orgData,(byte[])null);
|
||||
System.out.println("RSA签名:"+ Util.bytes2HexString(nakedSign));
|
||||
//裸签验签
|
||||
boolean ver = api.SYD_NakedVerify(1, RSAdn,nakedSign,orgData ,(byte[])null);
|
||||
System.out.println("RSA验签:"+ ver);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void detSign(){
|
||||
orgData = new byte[4096];
|
||||
//detach签名
|
||||
String detachedSign = api.detachedSign(orgData, SM2dn);
|
||||
System.out.println("detach签名:"+ detachedSign);
|
||||
|
||||
//detach验签
|
||||
boolean ver = api.detachedVerify(orgData, detachedSign);
|
||||
System.out.println("detach验签:"+ ver);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void folw(){
|
||||
String detSign = "MIICpQYKKoEcz1UGAQQCAqCCApUwggKRAgEBMQ4wDAYIKoEcz1UBgxEFADAMBgoqgRzPVQYBBAIBoIIByTCCAcUwggFooAMCAQICCDyTAAAAAAAlMAwGCCqBHM9VAYN1BQAwJjELMAkGA1UEBhMCQ04xFzAVBgNVBAMMDlN1bnlhcmRTTTJSb290MB4XDTE3MDUxNzAyNTI0NFoXDTIyMDcyNTAyNTI0NFowPTELMAkGA1UEBhMCQ04xEDAOBgNVBAoMB1N1bnlhcmQxDTALBgNVBAsMBDgwMDExDTALBgNVBAMMBDgwMDEwWTATBgcqhkjOPQIBBggqgRzPVQGCLQNCAAQ+2joQe3zDXMAFx/vwu05rQ6B+4U42BgPSLsoqYAstD6AwVdQA0SQDAPVGSLhJ0T9QszD/FDUbVkWxNoaCCmW7o2cwZTAOBgNVHQ8BAf8EBAMCAMAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwHwYDVR0jBBgwFoAU93/arv8hxtk6eq2g+6z+AqVO1cEwHQYDVR0OBBYEFAMWZaY2AwaQTNiFLpsa0dyCzBZ6MAwGCCqBHM9VAYN1BQADSQAwRgIhAIl2ZHGfln5hedcousARzZ2yeUjUbxSFMmhMmr5t6Q6nAiEAvqYX/KpIcvnPyB/Yiil+oq6DFdVM6P3vDxBhU/8taXExgaAwgZ0CAQEwMjAmMQswCQYDVQQGEwJDTjEXMBUGA1UEAwwOU3VueWFyZFNNMlJvb3QCCDyTAAAAAAAlMAwGCCqBHM9VAYMRBQAwDQYJKoEcz1UBgi0BBQAERzBFAiEArdbDSpZUSvPTGjzPOhyJhR7BK8owUpQjcq8eKSH8Xa8CIFmGgCdsd5V8qzeOOB7QtKnjH9KoyoGe8bASpgquX2p6";
|
||||
String netSignHex = "304402202EC53E985C09575A64A7B96C8A23713165FB0733C800145F07B9D5F990F546070220046F854CA62DF93AF8F0D541CA8B8697957423182EE70BB03B678A920985004F";
|
||||
|
||||
// //从detach签名中获取证书
|
||||
// String certBySign = api.getCertBySign(detSign);
|
||||
// //System.out.println("获取证书内容为:"+certBySign);
|
||||
// System.out.println(certBySign);
|
||||
|
||||
String certBySign = "-----BEGIN CERTIFICATE-----\n" +
|
||||
"MIIC2TCCAn2gAwIBAgIFIGhhlgkwDAYIKoEcz1UBg3UFADBdMQswCQYDVQQGEwJDTjEwMC4GA1UE\n" +
|
||||
"CgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRwwGgYDVQQDDBNDRkNB\n" +
|
||||
"IFRFU1QgU00yIE9DQTExMB4XDTIzMTAzMDAyMzQzNVoXDTI1MDkyOTAyMzQzNVowgY4xCzAJBgNV\n" +
|
||||
"BAYTAmNuMR8wHQYDVQQKDBZDRkNBIENTIFRFU1QgU00yIE9DQTExMQ0wCwYDVQQLDARHRklYMRkw\n" +
|
||||
"FwYDVQQLDBBPcmdhbml6YXRpb25hbC0xMTQwMgYDVQQDDCswNTFAWjQwMjM2MTAxODg4NkA0MDIz\n" +
|
||||
"NjEwMTg4ODZHRklYQDAwMDAwMDAzMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAECyoVBYoJB4gA\n" +
|
||||
"KsQJCOXv4mRpK6+9r3ygeuHfVlfM/Ry05TVEmTnYAx1EvPnpgzDsgufEQU7oCjLTeznV0Ytc9qOB\n" +
|
||||
"9TCB8jAfBgNVHSMEGDAWgBS+pn5NPXyPoFXmwS8JLiwgQ7NCfzBIBgNVHSAEQTA/MD0GCGCBHIbv\n" +
|
||||
"KgECMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2ZjYS5jb20uY24vdXMvdXMtMTUuaHRtMDoG\n" +
|
||||
"A1UdHwQzMDEwL6AtoCuGKWh0dHA6Ly8yMTAuNzQuNDIuMy9PQ0ExMS9TTTIvY3JsMjkyMzYuY3Js\n" +
|
||||
"MAsGA1UdDwQEAwID6DAdBgNVHQ4EFgQUEXk8fc+VwuPgF2uLzPJwLunm1mswHQYDVR0lBBYwFAYI\n" +
|
||||
"KwYBBQUHAwIGCCsGAQUFBwMEMAwGCCqBHM9VAYN1BQADSAAwRQIhANBoYhm7RwzcWi0QJa4IeBW3\n" +
|
||||
"jY4S64AdH/IWiO+aUyfPAiAu+9MrvCfd27KGZQKurf/djfbe5xBQg2CG6ae+Tax9lQ==\n" +
|
||||
"-----END CERTIFICATE-----";
|
||||
|
||||
String cert = "-----BEGIN CERTIFICATE-----\n" +
|
||||
"MIICMDCCAdagAwIBAgIJAOWoGwJCnjlLMAoGCCqBHM9VAYN1MGcxCzAJBgNVBAYT\n" +
|
||||
"AkNOMRAwDgYDVQQIDAdCZWlqaW5nMRAwDgYDVQQHDAdIYWlEaWFuMRMwEQYDVQQK\n" +
|
||||
"DApHTUNlcnQub3JnMR8wHQYDVQQDDBZHTUNlcnQgR00gUm9vdCBDQSAtIDAxMB4X\n" +
|
||||
"DTI1MDUxMzAyMzUxM1oXDTI2MDUxMzAyMzUxM1owRTELMAkGA1UEBgwCQ04xCzAJ\n" +
|
||||
"BgNVBAgMAnp6MQswCQYDVQQHDAJ6ejEMMAoGA1UECgwDenp6MQ4wDAYDVQQDDAV6\n" +
|
||||
"enp6ejBZMBMGByqGSM49AgEGCCqBHM9VAYItA0IABK5fyRSACWPIBBr/3U+qvjvp\n" +
|
||||
"niropv2PrA3ZLU1bG8vQpwAEMA0kwyqGgXURBPbvWdAhN7s9wfvHbJyMd9CMZGqj\n" +
|
||||
"gYwwgYkwDAYDVR0TAQH/BAIwADALBgNVHQ8EBAMCB4AwLAYJYIZIAYb4QgENBB8W\n" +
|
||||
"HUdNQ2VydC5vcmcgU2lnbmVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBSQB7UUqEuG\n" +
|
||||
"kl4mrx3MAhKTptfbYjAfBgNVHSMEGDAWgBR/Wl47AIRZKg+YvqEObzmVQxBNBzAK\n" +
|
||||
"BggqgRzPVQGDdQNIADBFAiEA4kgTdn/iA/XYfjTEeOcELwBXd0tTFghkpfP8DhBF\n" +
|
||||
"KFQCIAXZTL6VPtW67tM/DF4ZgFt5S/YIiFombKa2bWOfL81u\n" +
|
||||
"-----END CERTIFICATE-----";;
|
||||
|
||||
//将证书导入设备,获取证书主题
|
||||
String dn = api.importCertAndGetDN(cert);
|
||||
System.out.println("导入证书主题为:"+dn);
|
||||
|
||||
|
||||
//裸签名格式转换
|
||||
byte[] netSign = Util.hexString2Bytes(netSignHex);
|
||||
//使用导入证书对裸签名验签
|
||||
boolean verify = api.SYD_NakedVerify(orgData, netSign, dn);
|
||||
System.out.println("验证裸签名:"+verify);
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void test(){
|
||||
String cert = "-----BEGIN CERTIFICATE-----\n" +
|
||||
"MIIDNTCCAh2gAwIBAgIFE2lVIzcwDQYJKoZIhvcNAQEFBQAwITELMAkGA1UEBhMC\n" +
|
||||
"Q04xEjAQBgNVBAoTCUNGQ0EgT0NBMTAeFw0yMjA0MjIwODIyMTVaFw0yNzA0MjIw\n" +
|
||||
"ODIyMTVaMGQxCzAJBgNVBAYTAkNOMRIwEAYDVQQKEwlDRkNBIE9DQTExDzANBgNV\n" +
|
||||
"BAsTBlRQQy1TMzEVMBMGA1UECxMMSW5kaXZpZHVhbC0xMRkwFwYDVQQDExBBUkNV\n" +
|
||||
"NTIwMDAyNTI3MDg1MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC74cciiBbs\n" +
|
||||
"UcfmBxVlMWtsILsc85erRngknMaMW6wFyBsfJGrcL0TC7EO5XIsJXRrJN32vWdoo\n" +
|
||||
"6Qm8WUGour+hrSNDzJ7cVtNA1ragPIjlkmMgbDLD0UsEbjHmA902079Fktv35L4l\n" +
|
||||
"Hqe/vBygXcUoWJsGY5+8ykmI8W0LYPRkVwIDAQABo4G0MIGxMB8GA1UdIwQYMBaA\n" +
|
||||
"FNHb6YiC5d0aj0yqAIy+fPKrG/bZMDgGA1UdHwQxMC8wLaAroCmGJ2h0dHA6Ly9j\n" +
|
||||
"cmwuY2ZjYS5jb20uY24vUlNBL2NybDMwMDgyLmNybDALBgNVHQ8EBAMCA+gwHQYD\n" +
|
||||
"VR0OBBYEFMM/joQIWvRFdLOx0HarTXAtZk7RMCgGA1UdJQQhMB8GCCsGAQUFBwMC\n" +
|
||||
"BggrBgEFBQcDBAYJKoZIhvcvAQEFMA0GCSqGSIb3DQEBBQUAA4IBAQANEhHR34gg\n" +
|
||||
"iivRj9VTO2lS0StsHQy4A4seq9YmaQa6QZDUEndFwcxr5DN6CAf6xA1YiHG5FoYd\n" +
|
||||
"yH4sLORUhdfzQUWle7ZTPn4TfFjddPh3RDHXMXOh+pHNgrSjXpdACwadHedJO5e4\n" +
|
||||
"HqXI8wEoNovDA8HT4ucMmsZHbIyQMhxW9k+DgTHx8nvltqv3reoDou3ekQ1tSWvW\n" +
|
||||
"nUteKp64vop1ktgiIKjLshKRaUmZO4/fo9EcJHCH51J6f/2TAM7S+IaFzXR/VWf3\n" +
|
||||
"JaiaGbT8kAJI854SmKWqRE8HVzMo/NYNdP0M7xZ2kt68PVE/UIl20xWii9P2/7Oh\n" +
|
||||
"KYAnLX1nKjbg\n" +
|
||||
"-----END CERTIFICATE-----";
|
||||
|
||||
|
||||
String pemCert;
|
||||
if(cert.contains("-----BEGIN CERTIFICATE-----")){
|
||||
pemCert =cert;
|
||||
}else {
|
||||
String cert_begin = "-----BEGIN CERTIFICATE-----\n";
|
||||
String end_cert = "\n-----END CERTIFICATE-----";
|
||||
pemCert = cert_begin + cert + end_cert;
|
||||
}
|
||||
X509Certificate certificate = null;
|
||||
try {
|
||||
certificate = convertToX509Cert(pemCert);
|
||||
} catch (Exception e) {
|
||||
throw new SydApiException( 0xC101, e );
|
||||
}
|
||||
String dn = certificate.getSubjectDN().toString();
|
||||
System.out.println(dn);
|
||||
String name = certificate.getSubjectDN().getName();
|
||||
System.out.println(name);
|
||||
|
||||
String hex = "6D32F5C0151C8E25686E5016A1A3EE2118063C2FB83F941F01ED8C418563FCB5248BE6C50E504D19AC0CFA4573564F11878CBA3E2F2E40D8DAFD6CBD2929570223964D7C479639999C4CA3A84AFA3F791E296A3058F704DEB9BE5B96EEF5904A72DF5EA7CB88C1176B52292D9629784576D33F11D4DD721A585BAE359130DD5F";
|
||||
System.out.println(Util.encodeBase64(Util.hexString2Bytes(hex)));
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test2(){
|
||||
String index = "000000000000000000A00000000";
|
||||
String data = "12345678";
|
||||
String s = api.SYMEncrytByKeyIndex(index, data);
|
||||
System.out.println(s);
|
||||
}
|
||||
@Test
|
||||
public void testMutiImport() throws InterruptedException {
|
||||
List<Thread> threads = new ArrayList<>();
|
||||
|
||||
// 创建100个线程
|
||||
for (int i = 0; i < 200; i++) {
|
||||
Thread thread = new Thread(this::importAllCert);
|
||||
thread.start();
|
||||
threads.add(thread);
|
||||
}
|
||||
|
||||
// 等待所有线程完成
|
||||
for (Thread thread : threads) {
|
||||
thread.join();
|
||||
}
|
||||
|
||||
System.out.println(IpLockUtils.getLockStatus("172.1.41.96:8889"));
|
||||
|
||||
System.out.println("所有线程执行完毕");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void importAllCert() {
|
||||
StopWatch stopWatch = new StopWatch();
|
||||
stopWatch.start();
|
||||
String cert = "-----BEGIN CERTIFICATE-----\n" +
|
||||
"MIICMDCCAdagAwIBAgIJAOWoGwJCnjlLMAoGCCqBHM9VAYN1MGcxCzAJBgNVBAYT\n" +
|
||||
"AkNOMRAwDgYDVQQIDAdCZWlqaW5nMRAwDgYDVQQHDAdIYWlEaWFuMRMwEQYDVQQK\n" +
|
||||
"DApHTUNlcnQub3JnMR8wHQYDVQQDDBZHTUNlcnQgR00gUm9vdCBDQSAtIDAxMB4X\n" +
|
||||
"DTI1MDUxMzAyMzUxM1oXDTI2MDUxMzAyMzUxM1owRTELMAkGA1UEBgwCQ04xCzAJ\n" +
|
||||
"BgNVBAgMAnp6MQswCQYDVQQHDAJ6ejEMMAoGA1UECgwDenp6MQ4wDAYDVQQDDAV6\n" +
|
||||
"enp6ejBZMBMGByqGSM49AgEGCCqBHM9VAYItA0IABK5fyRSACWPIBBr/3U+qvjvp\n" +
|
||||
"niropv2PrA3ZLU1bG8vQpwAEMA0kwyqGgXURBPbvWdAhN7s9wfvHbJyMd9CMZGqj\n" +
|
||||
"gYwwgYkwDAYDVR0TAQH/BAIwADALBgNVHQ8EBAMCB4AwLAYJYIZIAYb4QgENBB8W\n" +
|
||||
"HUdNQ2VydC5vcmcgU2lnbmVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBSQB7UUqEuG\n" +
|
||||
"kl4mrx3MAhKTptfbYjAfBgNVHSMEGDAWgBR/Wl47AIRZKg+YvqEObzmVQxBNBzAK\n" +
|
||||
"BggqgRzPVQGDdQNIADBFAiEA4kgTdn/iA/XYfjTEeOcELwBXd0tTFghkpfP8DhBF\n" +
|
||||
"KFQCIAXZTL6VPtW67tM/DF4ZgFt5S/YIiFombKa2bWOfL81u\n" +
|
||||
"-----END CERTIFICATE-----";
|
||||
String cert1 = "-----BEGIN CERTIFICATE-----\n" +
|
||||
"MIIDNTCCAh2gAwIBAgIFE2lVIzcwDQYJKoZIhvcNAQEFBQAwITELMAkGA1UEBhMC\n" +
|
||||
"Q04xEjAQBgNVBAoTCUNGQ0EgT0NBMTAeFw0yMjA0MjIwODIyMTVaFw0yNzA0MjIw\n" +
|
||||
"ODIyMTVaMGQxCzAJBgNVBAYTAkNOMRIwEAYDVQQKEwlDRkNBIE9DQTExDzANBgNV\n" +
|
||||
"BAsTBlRQQy1TMzEVMBMGA1UECxMMSW5kaXZpZHVhbC0xMRkwFwYDVQQDExBBUkNV\n" +
|
||||
"NTIwMDAyNTI3MDg1MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC74cciiBbs\n" +
|
||||
"UcfmBxVlMWtsILsc85erRngknMaMW6wFyBsfJGrcL0TC7EO5XIsJXRrJN32vWdoo\n" +
|
||||
"6Qm8WUGour+hrSNDzJ7cVtNA1ragPIjlkmMgbDLD0UsEbjHmA902079Fktv35L4l\n" +
|
||||
"Hqe/vBygXcUoWJsGY5+8ykmI8W0LYPRkVwIDAQABo4G0MIGxMB8GA1UdIwQYMBaA\n" +
|
||||
"FNHb6YiC5d0aj0yqAIy+fPKrG/bZMDgGA1UdHwQxMC8wLaAroCmGJ2h0dHA6Ly9j\n" +
|
||||
"cmwuY2ZjYS5jb20uY24vUlNBL2NybDMwMDgyLmNybDALBgNVHQ8EBAMCA+gwHQYD\n" +
|
||||
"VR0OBBYEFMM/joQIWvRFdLOx0HarTXAtZk7RMCgGA1UdJQQhMB8GCCsGAQUFBwMC\n" +
|
||||
"BggrBgEFBQcDBAYJKoZIhvcvAQEFMA0GCSqGSIb3DQEBBQUAA4IBAQANEhHR34gg\n" +
|
||||
"iivRj9VTO2lS0StsHQy4A4seq9YmaQa6QZDUEndFwcxr5DN6CAf6xA1YiHG5FoYd\n" +
|
||||
"yH4sLORUhdfzQUWle7ZTPn4TfFjddPh3RDHXMXOh+pHNgrSjXpdACwadHedJO5e4\n" +
|
||||
"HqXI8wEoNovDA8HT4ucMmsZHbIyQMhxW9k+DgTHx8nvltqv3reoDou3ekQ1tSWvW\n" +
|
||||
"nUteKp64vop1ktgiIKjLshKRaUmZO4/fo9EcJHCH51J6f/2TAM7S+IaFzXR/VWf3\n" +
|
||||
"JaiaGbT8kAJI854SmKWqRE8HVzMo/NYNdP0M7xZ2kt68PVE/UIl20xWii9P2/7Oh\n" +
|
||||
"KYAnLX1nKjbg\n" +
|
||||
"-----END CERTIFICATE-----";
|
||||
List<String> masterNodes = new ArrayList<>();
|
||||
// masterNodes.add("172.16.18.99:8889");
|
||||
// masterNodes.add("172.16.18.5:8889");
|
||||
masterNodes.add("172.1.41.139:8889");
|
||||
masterNodes.add("172.1.41.96:8889");
|
||||
// masterNodes.add("172.16.18.8:8889");
|
||||
int timeout = 1;
|
||||
Map<String, String> map = new HashMap<>();
|
||||
map.put("snmp.target.ip", "172.1.41.191");
|
||||
map.put("snmp.target.port", "162");
|
||||
map.put("enterprise.oid", "1.3.6.1.4.1.9999");
|
||||
map.put("snmp.community", "public");
|
||||
map.put("snmp.version", "1");
|
||||
String snmpConfig = new Gson().toJson(map);
|
||||
SydApi4j sydApi4j = new SydApi4j();
|
||||
sydApi4j.importCertToServers(masterNodes, timeout, cert1, "12345678", snmpConfig);
|
||||
stopWatch.stop();
|
||||
System.out.println(stopWatch.getTotalTimeSeconds());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void delCert() {
|
||||
String SM2dn1 = "C=CN,ST=北京,L=北京,O=信雅达,OU=测试部门1,CN=172.1.41.139";
|
||||
boolean del = api.deleteCert(SM2dn1);
|
||||
System.out.println("删除:"+ del);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void selectCert() throws Exception {
|
||||
String SM2dn1 = "C=CN,ST=1,L=1,O=1,OU=1,OU=1,CN=1";
|
||||
String s = api.getCertByDn(SM2dn);
|
||||
System.out.println(s);
|
||||
String message = "sdas发顺丰";
|
||||
byte[] gbkBytes = message.getBytes("GBK");
|
||||
System.out.println("GBK Encoded Bytes: " + Arrays.toString(gbkBytes));
|
||||
|
||||
// Decoding back to String
|
||||
String decodedMessage = new String(gbkBytes, "GBK");
|
||||
System.out.println("Decoded Message: " + decodedMessage);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void selCert() {
|
||||
String sign = "3045022100F2C494D20823AB12D9D4D23FA12C7D856D4993BE122089D86A515F217CF51C0C02207E06F505F4E70893226F7B22B34E6578570E2813CB0CF1A6775A7782C7C45F7B";
|
||||
String s = api.getCertBySign(sign);
|
||||
System.out.println(s);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -15,14 +15,14 @@ import racal.sunyard.main.SydApi4j;
|
||||
public class Test4WL {
|
||||
private SydApi4j api;
|
||||
|
||||
final String SM2dn = "C=CN,ST=zz,L=zz,O=zzz,CN=zzzzz";
|
||||
final String SM2dn = "C=CN,O=1,OU=1,CN=1";
|
||||
final String RSAdn = "C=CN,O=2,OU=2,CN=2";
|
||||
byte[] orgData = new byte[100];
|
||||
@Before
|
||||
public void before() {
|
||||
// 通过设置debug的属性开启debug,如果不设置则默认不打开
|
||||
//System.setProperty("com.sunyard.sydapi4j.debug", "true");
|
||||
api = (SydApi4j) new SydApi4j().connect("172.1.41.139", 8889, null, 1000);
|
||||
api = (SydApi4j) new SydApi4j().connect("172.16.18.91", 8889, null, 1000);
|
||||
}
|
||||
|
||||
@After
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
package sample;
|
||||
|
||||
import com.sunyard.proto.Util;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import racal.sunyard.main.SydApi4j;
|
||||
|
||||
public class TestQR {
|
||||
SydApi4j api;
|
||||
|
||||
String Sm2Dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1";
|
||||
String RsaDn = "C=cn,O=CFCA TEST CA,OU=NCS2,OU=Enterprises,CN=041@Z402451000010@ShanDong@00000001";
|
||||
String odata = "123456787654321";
|
||||
@Before
|
||||
public void before() {
|
||||
// 通过设置debug的属性开启debug,如果不设置则默认不打开
|
||||
System.setProperty("com.sunyard.sydapi4j.debug", "true");
|
||||
|
||||
|
||||
api = (SydApi4j) new SydApi4j().connect("172.1.41.139", 8889, null, 1000);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void test1(){
|
||||
api.QRCodeSign(odata,Sm2Dn,"./QRcode.png");
|
||||
boolean b = api.QRCodeVer(Sm2Dn, "./QRcode.png");
|
||||
System.out.println(b);
|
||||
}
|
||||
@Test
|
||||
public void test2(){
|
||||
api.BarCodeSign(odata,Sm2Dn,"./Barcode.png");
|
||||
boolean b = api.BarCodeVer(Sm2Dn, "./Barcode.png");
|
||||
System.out.println(b);
|
||||
}
|
||||
@Test
|
||||
public void test3(){
|
||||
api.QRCodeSignRSA(2,odata,RsaDn,"./QRcodeRSA.png");
|
||||
boolean b = api.QRCodeVerRSA(2,RsaDn, "./QRcodeRSA.png");
|
||||
System.out.println(b);
|
||||
}
|
||||
@Test
|
||||
public void test4(){
|
||||
api.BarCodeSignRSA(2,odata,RsaDn,"./BarcodeRSA.png");
|
||||
boolean b = api.BarCodeVerRSA(2,RsaDn, "./BarcodeRSA.png");
|
||||
System.out.println(b);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user