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> 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 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 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 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); } }