28 changed files with 123 additions and 2770 deletions
+7 -97
View File
@@ -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>
+11 -97
View File
@@ -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传递的参数
-3
View File
@@ -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;
}
}
+2 -23
View File
@@ -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
-116
View File
@@ -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);
}
}
-54
View File
@@ -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() ) );
-134
View File
@@ -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();
}
}
}
-91
View File
@@ -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
-149
View File
@@ -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);
}
}
-119
View File
@@ -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());
}
}
+3 -3
View File
@@ -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);
}
+3 -3
View File
@@ -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" +
-370
View File
@@ -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);
}
}
+2 -2
View File
@@ -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
-50
View File
@@ -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);
}
}