package sample; import cn.hutool.core.date.StopWatch; import com.google.gson.Gson; import com.sunyard.RetWrap; import com.sunyard.SydApi; import com.sunyard.SydApiException; import com.sunyard.entity.ImportResult; import com.sunyard.proto.Util; import com.sunyard.util.CertUtil; import com.sunyard.util.IpLockUtils; import org.junit.After; import org.junit.Before; import org.junit.Test; import racal.sunyard.main.SydApi4j; import java.io.StringWriter; 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[1024]; @Before public void before() { //主备调用接口 SydApi4j.SYD_Set_Parameter_HA("172.1.41.139", "172.1.41.96", 8889, 3000); api = (SydApi4j) new SydApi4j(); } @Test public void connection() { } @After public void after() { try { this.api.disconnect(); } catch (Exception e) { e.printStackTrace(); } } @Test public void testHA() { // byte[] nakedSign1 = api.SYD_NakedSignAll(4,orgData, SM2dn); // System.out.println("SM2大数据裸签:"+ Util.bytes2HexString(nakedSign1)); // boolean nakedVerify1 = api.SYD_NakedVerifyAll(4,orgData, nakedSign1, SM2dn); // System.out.println("SM2数据验签:"+nakedVerify1 ); for (int i = 0; i < 10000; i++) { byte[] nakedSign = api.SYD_NakedSign(orgData,SM2dn); // System.out.println("SM2签名:"+ Util.bytes2HexString(nakedSign)); byte[] nakedSign1 = api.SYD_NakedSignAll(4,orgData, SM2dn); // System.out.println("SM2大数据裸签:"+ Util.bytes2HexString(nakedSign1)); boolean nakedVerify1 = api.SYD_NakedVerifyAll(4,orgData, nakedSign1, SM2dn); // System.out.println("SM2数据验签:"+nakedVerify1 ); } } /** * 长连接性能测试 * @throws InterruptedException * @throws ExecutionException */ @Test public void testPerformance() throws InterruptedException, ExecutionException { // 创建200个线程并发操作API ExecutorService executor = Executors.newFixedThreadPool(100); List> futures = new ArrayList<>(); CountDownLatch startLatch = new CountDownLatch(1); for (int i = 0; i < 100; i++) { futures.add(executor.submit(() -> { SydApi4j api2 = new SydApi4j(); for (int j = 0; j < 10000; j++) { StopWatch stopWatch = new StopWatch(); stopWatch.start(); byte[] nakedSign = api2.SYD_NakedSign(orgData,SM2dn); stopWatch.stop(); System.out.println("p1签名耗时---:" + stopWatch.getLastTaskTimeMillis() + "ms"); stopWatch.start(); String sign = "304502204ACEE7FA06644B6EAE62E5FBF824B6ED8D4432D5CE52580381ECF3570DE032F4022100F30DF2B902A3C34E183498C14565D03C9F28FD1BCCDFB557B52996539BCCF58F"; boolean ver = api2.SYD_NakedVerify(orgData,nakedSign, SM2dn); stopWatch.stop(); System.out.println("p1验签耗时:" + stopWatch.getLastTaskTimeMillis() + "ms"); } api2.disconnect(); })); } // 触发所有线程开始 startLatch.countDown(); Thread.sleep(500); // 等待所有任务完成 for (Future future : futures) { future.get(); } executor.shutdown(); } /** * 短连接性能测试 * @throws InterruptedException * @throws ExecutionException */ @Test public void testUtils() throws InterruptedException, ExecutionException { // 创建200个线程并发操作API ExecutorService executor = Executors.newFixedThreadPool(200); List> futures = new ArrayList<>(); CountDownLatch startLatch = new CountDownLatch(1); for (int i = 0; i < 200; i++) { futures.add(executor.submit(() -> { for (int j = 0; j < 1000; j++) { StopWatch stopWatch = new StopWatch(); SydUtils sydUtils = new SydUtils(); stopWatch.start(); byte[] nakedSign = sydUtils.nakedSign(orgData,SM2dn); stopWatch.stop(); System.out.println("p1签名耗时---:" + stopWatch.getLastTaskTimeMillis() + "ms"); stopWatch.start(); boolean ver = sydUtils.nakedVerify(orgData,nakedSign, SM2dn); stopWatch.stop(); System.out.println("p1验签耗时:" + stopWatch.getLastTaskTimeMillis() + "ms"); sydUtils.disconnect(); } })); } // 触发所有线程开始 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)); String dn ="C=cn,O=CFCA CS OCA11,OU=CNAPS,OU=Enterprises,CN=041@Z313641099995@BHN@00000010"; orgData = new byte[1024]; //裸签 // byte[] nakedSign = api.SYD_NakedSign(orgData,dn); // System.out.println("SM2签名:"+ Util.bytes2HexString(nakedSign)); //裸签验签 String sign = "30450220400849D815EE6C73A6D7334D76EF6076452367E444BBF902B4278A0D7C9843C302210095086DDC9A42E53ABCD0B172BA6A9A9814AEA580C19CDD229ABD3277321984C1"; boolean ver = api.SYD_NakedVerify(orgData,Util.hexString2Bytes(sign), dn); 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[1024]; for (int i = 0; i < 10000; i++) { //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 threads = new ArrayList<>(); // 创建100个线程 for (int i = 0; i < 20; i++) { Thread thread = new Thread(() -> { for (int j = 0; j < 1000; j++) { api.SYD_NakedSign(orgData,SM2dn); importAllCert(); } }); thread.start(); threads.add(thread); } // 等待所有线程完成 for (Thread thread : threads) { thread.join(); } System.out.println(IpLockUtils.getLockStatus("172.1.41.139: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-----"; List masterNodes = new ArrayList<>(); // masterNodes.add("172.16.18.99:8889"); // masterNodes.add("172.16.18.5:8889"); masterNodes.add("172.1.41.96:8889"); // masterNodes.add("172.1.41.196:8889"); // masterNodes.add("172.16.18.8:8889"); int timeout = 3000; Map 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"); Gson gson = new Gson(); String snmpConfig = gson.toJson(map); SydApi4j sydApi4j = new SydApi4j(); ImportResult result = sydApi4j.importCertToServers(masterNodes, timeout, cert, "12345678", snmpConfig); System.out.println(gson.toJson(result)); System.out.println(result.getCode()); System.out.println(gson.toJson(result.getErrCnt())); System.out.println(result.getCertDn()); 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=2,L=3,O=3,OU=1,OU=1,CN=qwqq"; String dn = "C=CN,ST=2,L=3,O=3,OU=1,CN=qwqq"; String dn1 = "C=cn,O=CFCA CS OCA11,OU=CNAPS,OU=Enterprises,CN=041@Z313641099995@BHN@00000010"; String dn2 = "C=cn,O=CFCA TEST OCA1,OU=DEMP,OU=Organizational-1,CN=041@ZDEMP@DEMP@00000001"; String s = api.getCertByDn(dn1,0); 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() throws Exception { String certBase64 = "MIICujCCAl6gAwIBAgIFEFeGNUIwDAYIKoEcz1UBg3UFADBcMQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRswGQYDVQQDDBJDRkNBIFRFU1QgU00yIE9DQTEwHhcNMjMxMDI2MDYwMDU5WhcNMjgxMDI2MDYwMDU5WjByMQswCQYDVQQGEwJjbjEXMBUGA1UECgwOQ0ZDQSBURVNUIE9DQTExDTALBgNVBAsMBERFTVAxGTAXBgNVBAsMEE9yZ2FuaXphdGlvbmFsLTExIDAeBgNVBAMMFzA0MUBaREVNUEBERU1QQDAwMDAwMDAxMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAE3NOLwnCvPxeZxS5lUSl+fxojdYwV1mD5eDGOkPeATl88oW0Q1PuBd0aQ29HmufRamZb2BlfLhjcgS5TsKlX4qqOB9DCB8TAfBgNVHSMEGDAWgBRr/hjaj0I6prhtsy6Igzo0osEw4TBIBgNVHSAEQTA/MD0GCGCBHIbvKgEBMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2ZjYS5jb20uY24vdXMvdXMtMTQuaHRtMDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly91Y3JsLmNmY2EuY29tLmNuL1NNMi9jcmw1Mzg2My5jcmwwCwYDVR0PBAQDAgPoMB0GA1UdDgQWBBSElGKzsZJ04RMd60sFqiHpxl9/njAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwQwDAYIKoEcz1UBg3UFAANIADBFAiEAjmCCIlDNdXw0qRZe7oYrkel4wTpg++c/C+MKLbPfRpgCIEVyrM68qeuVmaFZ5ZA3TtUXQg1RYQjz/5yhl/3jhdQ9"; String s = "MIICujCCAl6gAwIBAgIFEFeGNUIwDAYIKoEcz1UBg3UFADBcMQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9y aXR5MRswGQYDVQQDDBJDRkNBIFRFU1QgU00yIE9DQTEwHhcNMjMxMDI2MDYwMDU5 WhcNMjgxMDI2MDYwMDU5WjByMQswCQYDVQQGEwJjbjEXMBUGA1UECgwOQ0ZDQSBU RVNUIE9DQTExDTALBgNVBAsMBERFTVAxGTAXBgNVBAsMEE9yZ2FuaXphdGlvbmFs LTExIDAeBgNVBAMMFzA0MUBaREVNUEBERU1QQDAwMDAwMDAxMFkwEwYHKoZIzj0C AQYIKoEcz1UBgi0DQgAE3NOLwnCvPxeZxS5lUSl+fxojdYwV1mD5eDGOkPeATl88 oW0Q1PuBd0aQ29HmufRamZb2BlfLhjcgS5TsKlX4qqOB9DCB8TAfBgNVHSMEGDAW gBRr/hjaj0I6prhtsy6Igzo0osEw4TBIBgNVHSAEQTA/MD0GCGCBHIbvKgEBMDEw LwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2ZjYS5jb20uY24vdXMvdXMtMTQuaHRt MDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly91Y3JsLmNmY2EuY29tLmNuL1NNMi9j cmw1Mzg2My5jcmwwCwYDVR0PBAQDAgPoMB0GA1UdDgQWBBSElGKzsZJ04RMd60sF qiHpxl9/njAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwQwDAYIKoEcz1UB g3UFAANIADBFAiEAjmCCIlDNdXw0qRZe7oYrkel4wTpg++c/C+MKLbPfRpgCIEVy rM68qeuVmaFZ5ZA3TtUXQg1RYQjz/5yhl/3jhdQ9"; String cert = convertToPem( Base64.getDecoder().decode(s)); System.out.println("------------------------------------------------------------------------------------"); String dn = api.importCertAndGetDN(cert); System.out.println("导入证书成功,dn:" + dn); System.out.println("------------------------------------------------------------------------------------"); String cert1 = api.getCertByDn(dn,0); System.out.println("查询证书:" + cert1); System.out.println("------------------------------------------------------------------------------------"); // boolean delFlag = api.deleteCert(dn); // System.out.println("删除证书:"+ delFlag); // System.out.println("------------------------------------------------------------------------------------"); // try { // String cert2 = api.getCertByDn(dn,0); // System.out.println("删除后查询证书:" + cert1); // } catch (Exception e) { // System.out.println("查询证书失败,证书不存在"); // } } @Test public void testAll() { //国密证书 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-----"; List masterNodes = new ArrayList<>(); masterNodes.add("172.1.41.19:8889"); masterNodes.add("172.1.41.9:8889"); int timeout = 100; Map map = new HashMap<>(); map.put("snmp.target.ip", "172.1.1.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); //导入证书并获取DN SydApi4j sydApi4j = new SydApi4j(); ImportResult importResult = sydApi4j.importCertToServers(masterNodes, timeout, cert, "12345678", snmpConfig); System.out.println("导入结果ImportResult:" + new Gson().toJson(importResult)); System.out.println("------------------------------------------------------------------------------------"); String SM2dn = importResult.getCertDn(); System.out.println("导入证书主题为:"+ SM2dn); //主备模式设置 SydApi4j.SYD_Set_Parameter_HA("172.1.41.139", "172.1.41.139", 8889, 1000); SydApi4j api = (SydApi4j) new SydApi4j(); //签名原始数据 byte[] orgData = "12345678".getBytes(); //p1裸签名(国密证书) byte[] nakedSign = api.SYD_NakedSign(orgData, SM2dn); System.out.println("------------------------------------------------------------------------------------"); System.out.println("p1签名:"+ Util.bytes2HexString(nakedSign)); System.out.println("p1签名2:"+ Util.encodeBase64(nakedSign)); //p1裸签验签(国密证书) String si = "MEUCIQCp26t1r3lAWrSSM6NmvqfJKlOFgdPyVKzK6FyImDnzYAIgXJV8GUztPGk0YxYGNU5OMoIqnFJRyLGh72hkUjfWDaM="; boolean ver = api.SYD_NakedVerify(orgData, Util.decodeBase64(si), SM2dn); System.out.println("------------------------------------------------------------------------------------"); System.out.println("p1验签:"+ ver); //p7 detach签名(带公钥证书) String detachedSign = api.detachedSign(orgData, SM2dn); System.out.println("------------------------------------------------------------------------------------"); System.out.println("p7 detach签名:"+ detachedSign); //p7 detach验签(带公钥证书) boolean ver1 = api.detachedVerify(orgData, detachedSign); System.out.println("------------------------------------------------------------------------------------"); System.out.println("p7 detach验签:"+ ver1); //从p7签名数据中获取证书,签名数据为base64编码格式 String cert1 = api.getCertBySign(detachedSign); System.out.println("------------------------------------------------------------------------------------"); System.out.println("根据p7签名值获取的证书为:" + cert1); //数字信封 // RetWrap genSM2 = api.generateDEByDn(SM2dn, orgData); // byte[] cipherKey = (byte[]) genSM2.get(SydApi.RET_CIPHER_KEY); // System.out.println("SM2数字信封: " + new String(cipherKey)); // RetWrap denSM2 = api.decryptDEByDN( SM2dn, cipherKey); // byte[] oData = (byte[]) denSM2.get("oData"); // System.out.println("SM2信封解密:"+Util.bytes2HexString(oData)); //根据证书DN从加密码机删除证书 // boolean delFlag = api.deleteCert(SM2dn); // System.out.println("------------------------------------------------------------------------------------"); // System.out.println("删除证书成功:"+ delFlag); } @Test public void testDE() { SydApi4j sydApi4j = new SydApi4j(); // String SM2dn = "C=CN,ST=北京,L=北京,O=信雅达,CN=172.1.40.188"; // String SM2dn = "C=CN,O=China Financial Certification Authority,CN=CFCA ACS TEST SM2 OCA31"; //数字信封 RetWrap genSM2 = api.generateDEByDn(SM2dn, orgData); byte[] cipherKey = (byte[]) genSM2.get(SydApi.RET_CIPHER_KEY); System.out.println("SM2数字信封: " + new String(cipherKey)); RetWrap denSM2 = api.decryptDEByDN( SM2dn, cipherKey); byte[] oData = (byte[]) denSM2.get("oData"); System.out.println("SM2信封解密:"+Util.bytes2HexString(oData)); } @Test public void verifyCert() throws Exception { String cert1 = "-----BEGIN CERTIFICATE-----\n" + "MIIDzQYKKoEcz1UGAQQCAqCCA70wggO5AgEBMQ4wDAYIKoEcz1UBgxEFADAMBgoqgRzPVQYBBAIBoIICvjCCArowggJeoAMCAQICBRBXhjVCMAwGCCqBHM9VAYN1BQAwXDELMAkGA1UEBhMCQ04xMDAuBgNVBAoMJ0NoaW5hIEZpbmFuY2lhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEbMBkGA1UEAwwSQ0ZDQSBURVNUIFNNMiBPQ0ExMB4XDTIzMTAyNjA2MDA1OVoXDTI4MTAyNjA2MDA1OVowcjELMAkGA1UEBhMCY24xFzAVBgNVBAoMDkNGQ0EgVEVTVCBPQ0ExMQ0wCwYDVQQLDARERU1QMRkwFwYDVQQLDBBPcmdhbml6YXRpb25hbC0xMSAwHgYDVQQDDBcwNDFAWkRFTVBAREVNUEAwMDAwMDAwMTBZMBMGByqGSM49AgEGCCqBHM9VAYItA0IABNzTi8Jwrz8XmcUuZVEpfn8aI3WMFdZg+XgxjpD3gE5fPKFtENT7gXdGkNvR5rn0WpmW9gZXy4Y3IEuU7CpV+KqjgfQwgfEwHwYDVR0jBBgwFoAUa/4Y2o9COqa4bbMuiIM6NKLBMOEwSAYDVR0gBEEwPzA9BghggRyG7yoBATAxMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmNmY2EuY29tLmNuL3VzL3VzLTE0Lmh0bTA5BgNVHR8EMjAwMC6gLKAqhihodHRwOi8vdWNybC5jZmNhLmNvbS5jbi9TTTIvY3JsNTM4NjMuY3JsMAsGA1UdDwQEAwID6DAdBgNVHQ4EFgQUhJRis7GSdOETHetLBaoh6cZff54wHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMEMAwGCCqBHM9VAYN1BQADSAAwRQIhAI5ggiJQzXV8NKkWXu6GK5HpeME6YPvnPwvjCi2z30aYAiBFcqzOvKnrlZmhWeWQN07VF0INUWEI8/+coZf944XUPTGB0zCB0AIBATBlMFwxCzAJBgNVBAYTAkNOMTAwLgYDVQQKDCdDaGluYSBGaW5hbmNpYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGzAZBgNVBAMMEkNGQ0EgVEVTVCBTTTIgT0NBMQIFEFeGNUIwDAYIKoEcz1UBgxEFADANBgkqgRzPVQGCLQEFAARHMEUCIAty3HjlED9ti0NkRI1wpCr8oUws93qHwlYMU0X2HnS3AiEAtv2/HiXabruxV9WLYeMNsO58qcMiBAy1CKmM/zMJCHI=\n" + "-----END CERTIFICATE-----"; String cert2 = "MIIC3DCCAoCgAwIBAgIFIGiRZIYwDAYIKoEcz1UBg3UFADBdMQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRwwGgYDVQQDDBNDRkNBIFRFU1QgU00yIE9DQTExMB4XDTI0MDgxNTA4MzAxMloXDTI3MDIwMTA4MzAxMlowgZExCzAJBgNVBAYTAmNuMR8wHQYDVQQKDBZDRkNBIENTIFRFU1QgU00yIE9DQTExMQ4wDAYDVQQLDAVDTkFQUzEZMBcGA1UECwwQT3JnYW5pemF0aW9uYWwtMTE2MDQGA1UEAwwtMDUxQFozMTM1ODEwMDMyODRAMzEzNTgxMDAzMjg0Q05BUFMyQDAwMDAwMDAxMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEFRjj5zgEwAnsF7hh6RVJfXSdybPBGBlF7gsVOUX5tU7E0YN/eYZk9j1jbOCrBWz611gsr+HkU0OZsFFlQTattKOB9TCB8jAfBgNVHSMEGDAWgBS+pn5NPXyPoFXmwS8JLiwgQ7NCfzBIBgNVHSAEQTA/MD0GCGCBHIbvKgECMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2ZjYS5jb20uY24vdXMvdXMtMTUuaHRtMDoGA1UdHwQzMDEwL6AtoCuGKWh0dHA6Ly8yMTAuNzQuNDIuMy9PQ0ExMS9TTTIvY3JsMjkyODkuY3JsMAsGA1UdDwQEAwID6DAdBgNVHQ4EFgQUDONZoezPmMkCIHifM0KK9y0N8bQwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMEMAwGCCqBHM9VAYN1BQADSAAwRQIhAKesbWSJQXAHBoLvTbtM+CP7eqwfBMQc0nRridvyXOPOAiAp2Zr1Ncren8n2U1XP4tWeYp1YyPBMke0BSlOFunJ0Jg=="; byte[] s = Base64.getDecoder().decode(cert2); System.out.println(convertToPem(s)); X509Certificate certificate = null; try { certificate = CertUtil.convertToX509Cert(cert1); } catch (Exception e) { System.out.println("证书格式错误!"); } } @Test public void convert() throws Exception { //原始证书 String cert = "MIIC3DCCAoCgAwIBAgIFIGiRZIYwDAYIKoEcz1UBg3UFADBdMQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRwwGgYDVQQDDBNDRkNBIFRFU1QgU00yIE9DQTExMB4XDTI0MDgxNTA4MzAxMloXDTI3MDIwMTA4MzAxMlowgZExCzAJBgNVBAYTAmNuMR8wHQYDVQQKDBZDRkNBIENTIFRFU1QgU00yIE9DQTExMQ4wDAYDVQQLDAVDTkFQUzEZMBcGA1UECwwQT3JnYW5pemF0aW9uYWwtMTE2MDQGA1UEAwwtMDUxQFozMTM1ODEwMDMyODRAMzEzNTgxMDAzMjg0Q05BUFMyQDAwMDAwMDAxMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEFRjj5zgEwAnsF7hh6RVJfXSdybPBGBlF7gsVOUX5tU7E0YN/eYZk9j1jbOCrBWz611gsr+HkU0OZsFFlQTattKOB9TCB8jAfBgNVHSMEGDAWgBS+pn5NPXyPoFXmwS8JLiwgQ7NCfzBIBgNVHSAEQTA/MD0GCGCBHIbvKgECMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2ZjYS5jb20uY24vdXMvdXMtMTUuaHRtMDoGA1UdHwQzMDEwL6AtoCuGKWh0dHA6Ly8yMTAuNzQuNDIuMy9PQ0ExMS9TTTIvY3JsMjkyODkuY3JsMAsGA1UdDwQEAwID6DAdBgNVHQ4EFgQUDONZoezPmMkCIHifM0KK9y0N8bQwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMEMAwGCCqBHM9VAYN1BQADSAAwRQIhAKesbWSJQXAHBoLvTbtM+CP7eqwfBMQc0nRridvyXOPOAiAp2Zr1Ncren8n2U1XP4tWeYp1YyPBMke0BSlOFunJ0Jg=="; byte[] s = Base64.getDecoder().decode(cert); System.out.println(convertToPem(s)); } public String convertToPem(byte[] derCert) throws Exception { // 使用Base64编码器(兼容RFC 4648,每行64字符) StringWriter writer = new StringWriter(); writer.write("-----BEGIN CERTIFICATE-----\n"); // 将DER转换为Base64并分割为每行64字符 String base64Cert = Base64.getMimeEncoder(64, "\n".getBytes()).encodeToString(derCert); writer.write(base64Cert); // 如果Base64编码的字符串没有以换行结束,则添加换行 if (!base64Cert.endsWith("\n")) { writer.write("\n"); } writer.write("-----END CERTIFICATE-----\n"); return writer.toString(); } }