@@ -1,6 +1,7 @@
package sample ;
import cn.hutool.core.date.StopWatch ;
import com.Sample.SydUtils ;
import com.google.gson.Gson ;
import com.sunyard.RetWrap ;
import com.sunyard.SydApi ;
@@ -15,6 +16,7 @@ import org.junit.Test;
import racal.sunyard.main.SydApi4j ;
import java.io.StringWriter ;
import java.nio.charset.StandardCharsets ;
import java.security.cert.X509Certificate ;
import java.util.* ;
import java.util.concurrent.* ;
@@ -74,12 +76,12 @@ public class Test4NongxinCW {
@Test
public void testPerformance ( ) throws InterruptedException , ExecutionException {
// 创建200个线程并发操作API
ExecutorService executor = Executors . newFixedThreadPool ( 100 ) ;
ExecutorService executor = Executors . newFixedThreadPool ( 10 ) ;
List < Future < ? > > futures = new ArrayList < > ( ) ;
CountDownLatch startLatch = new CountDownLatch ( 1 ) ;
for ( int i = 0 ; i < 100 ; i + + ) {
for ( int i = 0 ; i < 10 ; i + + ) {
futures . add ( executor . submit ( ( ) - > {
SydApi4j api2 = new SydApi4j ( ) ;
@@ -88,12 +90,12 @@ public class Test4NongxinCW {
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 " ) ;
// 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 ( ) ;
} ) ) ;
@@ -117,20 +119,20 @@ public class Test4NongxinCW {
@Test
public void testUtils ( ) throws InterruptedException , ExecutionException {
// 创建200个线程并发操作API
ExecutorService executor = Executors . newFixedThreadPool ( 200 ) ;
ExecutorService executor = Executors . newFixedThreadPool ( 10 ) ;
List < Future < ? > > futures = new ArrayList < > ( ) ;
CountDownLatch startLatch = new CountDownLatch ( 1 ) ;
for ( int i = 0 ; i < 200 ; i + + ) {
for ( int i = 0 ; i < 20 ; i + + ) {
futures . add ( executor . submit ( ( ) - > {
for ( int j = 0 ; j < 1000 ; j + + ) {
StopWatch stopWatch = new StopWatch ( ) ;
SydUtils sydUtils = new SydUtils ( ) ;
SydUtils sydUtils = new SydUtils ( " 172.1.41.139 " , " 172.1.41.96 " , 8889 , 3000 ) ;
stopWatch . start ( ) ;
byte [ ] nakedSign = sydUtils . nakedSign ( orgData , SM2dn ) ;
byte [ ] nakedSign = sydUtils . SYD_NakedSign ( orgData , SM2dn ) ;
stopWatch . stop ( ) ;
System . out . println ( " p1签名耗时---: " + stopWatch . getLastTaskTimeMillis ( ) + " ms " ) ;
stopWatch . start ( ) ;
boolean ver = sydUtils . nakedVerify ( orgData , nakedSign , SM2dn ) ;
boolean ver = sydUtils . SYD_NakedVerify ( orgData , nakedSign , SM2dn ) ;
stopWatch . stop ( ) ;
System . out . println ( " p1验签耗时: " + stopWatch . getLastTaskTimeMillis ( ) + " ms " ) ;
sydUtils . disconnect ( ) ;
@@ -149,20 +151,29 @@ public class Test4NongxinCW {
@Test
public void nakeSign ( ) {
String ori = " 2025071700064382|2025-06-21T15:39:47|102100088898|102100088898|402361018886|402361018886|BEPS|DM00|202507170013|010000|123456789123456789|1|2025071700064387|王二|地址908|6232208340101760984|402361018886|402361018886|CNY0.05| " ;
System . out . println ( Util . encodeBase64 ( ori . getBytes ( StandardCharsets . UTF_8 ) ) ) ;
String signValue = " MEYCIQDdG83MV2zyX2ZboKKUKZX+8qHr3ZfmxlBY7gElqEQZsAIhAPXjePjHfjChP0Rdlsf4PU9eJN7Lbl29nrHCQ7NzhZOV " ;
byte [ ] s = Util . decodeBase64 ( signValue ) ;
System . out . println ( Util . bytes2HexString ( s ) ) ;
// 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);
// String dn =" C=cn,O=CFCA CS OCA11,OU=CNAPS,OU=Enterprises,CN=041@Z313641099995@BHN@00000010";
// orgData = "123456".getBytes();
//
// //裸签
// byte[] nakedSign = api.SYD_NakedSign(orgData, SM2dn);
// 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 ) ;
// System.out.println(Util.encodeBase64(nakedSign));
// //裸签验签
//
// String sign = "30450220400849D815EE6C73A6D7334D76EF6076452367E444BBF902B4278A0D7C9843C302210095086DDC9A42E53ABCD0B172BA6A9A9814AEA580C19CDD229ABD3277321984C1";
// boolean ver = api.SYD_NakedVerify(orgData, nakedSign, SM2dn);
// System.out.println("SM2验签:"+ ver);
}
@Test
@@ -389,7 +400,8 @@ public class Test4NongxinCW {
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 ) ;
// String s = api.getCertByDn(dn1);
String s = api . getCertByDn ( dn1 . getBytes ( ) ) ;
System . out . println ( s ) ;
String message = " sdas发顺丰 " ;
byte [ ] gbkBytes = message . getBytes ( " GBK " ) ;
@@ -403,14 +415,14 @@ public class Test4NongxinCW {
@Test
public void selCert ( ) throws Exception {
String certBase64 = " MIICujCCAl6gAwIBAgIFEFeGNUIwDAYIKoEcz1UBg3UFADBcMQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRswGQYDVQQDDBJDRkNBIFRFU1QgU00yIE9DQTEwHhcNMjMxMDI2MDYwMDU5WhcNMjgxMDI2MDYwMDU5WjByMQswCQYDVQQGEwJjbjEXMBUGA1UECgwOQ0ZDQSBURVNUIE9DQTExDTALBgNVBAsMBERFTVAxGTAXBgNVBAsMEE9yZ2FuaXphdGlvbmFsLTExIDAeBgNVBAMMFzA0MUBaREVNUEBERU1QQDAwMDAwMDAxMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAE3NOLwnCvPxeZxS5lUSl+fxojdYwV1mD5eDGOkPeATl88oW0Q1PuBd0aQ29HmufRamZb2BlfLhjcgS5TsKlX4qqOB9DCB8TAfBgNVHSMEGDAWgBRr/hjaj0I6prhtsy6Igzo0osEw4TBIBgNVHSAEQTA/MD0GCGCBHIbvKgEBMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2ZjYS5jb20uY24vdXMvdXMtMTQuaHRtMDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly91Y3JsLmNmY2EuY29tLmNuL1NNMi9jcmw1Mzg2My5jcmwwCwYDVR0PBAQDAgPoMB0GA1UdDgQWBBSElGKzsZJ04RMd60sFqiHpxl9/njAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwQwDAYIKoEcz1UBg3UFAANIADBFAiEAjmCCIlDNdXw0qRZe7oYrkel4wTpg++c/C+MKLbPfRpgCIEVyrM68qeuVmaFZ5ZA3TtUXQg1RYQjz/5yhl/3jhdQ9 " ;
String s = " MIICuj CCAl6 gAwIBAgIFEFeGNUI wDAYIKoEcz1UBg3UFADBc MQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9y aXR5MRs wGQ YDVQQDDBJ DRkNBIFRFU1QgU00yIE9DQTEwHhcNMjMxMDI2MDYwMDU5 WhcNMjgxMDI2MDYwMDU5WjByMQswCQYDVQQGEwJjbjEXMBUGA1UECgwOQ0ZDQSBU RVNUIE9DQTExDTALBgNVBAsMBERFTVAxGTAXBgNVBAsMEE9yZ2FuaXphdGlvbmFs LTExIDAeBgNVBAMMFzA0MUBaREVNUEBERU1QQDAwMDAwMDAxMFkwEwYHKoZIzj0C AQYIKoEcz1UBgi0DQgAE3NOLwnCvPxeZxS5lUSl+fxojdYwV1mD5eDGOkPeATl88 oW0Q1PuBd0aQ29HmufRamZb2BlfLhjcgS5TsKlX4qqOB9DCB8TAfBgNVHSMEGDAW gBRr/hjaj0I6prhtsy6Igzo0osEw4TBIBgNVHSAEQTA/MD0GCGCBHIbvKgEBMDEw LwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2ZjYS5jb20uY24vdXMvdXMtMTQuaHRt MDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly91Y3JsLmNmY2EuY29tLmNu L1NNMi9j cmw1Mzg2My 5jcmwwCwYDVR0PBAQDAgPoMB0GA1UdDgQWBBSElGKzsZJ04RMd60sF qiHpxl9/nj AdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwQwDAYIKoEcz1UB g3UFAANIADBFAiEAjmCCIlDNdXw0qRZe7oYrkel4wTpg++c/C+MKLbPfRpgCIEVy rM68qeuVmaFZ5ZA3TtUXQg1RYQjz/5yhl/3jhdQ9 " ;
String cert = convertToPem ( Base64 . getDecoder ( ) . decode ( s ) ) ;
// String certBase64 = " MIICujCCAl6gAwIBAgIFEFeGNUIwDAYIKoEcz1UBg3UFADBcMQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRswGQYDVQQDDBJDRkNBIFRFU1QgU00yIE9DQTEwHhcNMjMxMDI2MDYwMDU5WhcNMjgxMDI2MDYwMDU5WjByMQswCQYDVQQGEwJjbjEXMBUGA1UECgwOQ0ZDQSBURVNUIE9DQTExDTALBgNVBAsMBERFTVAxGTAXBgNVBAsMEE9yZ2FuaXphdGlvbmFsLTExIDAeBgNVBAMMFzA0MUBaREVNUEBERU1QQDAwMDAwMDAxMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAE3NOLwnCvPxeZxS5lUSl+fxojdYwV1mD5eDGOkPeATl88oW0Q1PuBd0aQ29HmufRamZb2BlfLhjcgS5TsKlX4qqOB9DCB8TAfBgNVHSMEGDAWgBRr/hjaj0I6prhtsy6Igzo0osEw4TBIBgNVHSAEQTA/MD0GCGCBHIbvKgEBMDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2ZjYS5jb20uY24vdXMvdXMtMTQuaHRtMDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly91Y3JsLmNmY2EuY29tLmNuL1NNMi9jcmw1Mzg2My5jcmwwCwYDVR0PBAQDAgPoMB0GA1UdDgQWBBSElGKzsZJ04RMd60sFqiHpxl9/njAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwQwDAYIKoEcz1UBg3UFAANIADBFAiEAjmCCIlDNdXw0qRZe7oYrkel4wTpg++c/C+MKLbPfRpgCIEVyrM68qeuVmaFZ5ZA3TtUXQg1RYQjz/5yhl/3jhdQ9";
// String s = " MIICzD CCAnC gAwIBAgIFIGdEBSg wDAYIKoEcz1UBg3UFADBd MQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRw wGg YDVQQDDBN DRkNBIFRFU1QgU00yIE9DQTExMB4XDTIzMDcxMDA4MDIyN1oXDTI2MDQwNTA4MDIyN1owgYExCzAJBgNVBAYTAmNuMR8wHQYDVQQKDBZDRkNBIENTIFRFU1QgU00yIE9DQTExMQ4wDAYDVQQLDAVDTkFQUzEZMBcGA1UECwwQT3JnYW5pemF0aW9uYWwtMTEmMCQGA1UEAwwdMDUxQDMxMDIxMDAwODg4OThAeGxAMDAwMDAwMDEwWTATBgcqhkjOPQIBBggqgRzPVQGCLQNCAASSIGceUTcELVdBO6F0xd4LWSvG2KfDeJJDeVFT0GxKyZ+CwJqLZCVX9V7rH3OGim34olp7QFPHjFj16UQCj7Doo4H1MIHyMB8GA1UdIwQYMBaAFL6mfk09fI+gVebBLwkuLCBDs0J/MEgGA1UdIARBMD8wPQYIYIEchu8qAQIwMTAvBggrBgEFBQcCARYjaHR0cDovL3d3dy5jZmNhLmNvbS5jbi91cy91cy0xNS5odG0wOgYDVR0fBDMwMTAvoC2gK4YpaHR0cDovLzIxMC43NC40Mi4zL09DQTEx L1NNMi9jcmwyODI4MC 5jcmwwCwYDVR0PBAQDAgPoMB0GA1UdDgQWBBSdAfIokLVhVjYzOE8B1JmupwFeTD AdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwQwDAYIKoEcz1UBg3UFAANIADBFAiAgtrRZ4HENDv11/yNFhSOdSrRrmvHuyVahXH8+aVZQrAIhAM6NTl1CFVewOOVB3VbPuVtYs5dyNpLSqC1tmxj5QtWd";
// String cert = convertToPem( Base64.getDecoder().decode(s));
// System.out.println("------------------------------------------------------------------------------------");
// String dn = api.importCertAndGetDN(cert);
// System.out.println("导入证书成功,dn:" + dn);
System . out . println ( " ------------------------------------------------------------------------------------ " ) ;
String dn = api . importCertAndGetDN ( cert ) ;
System . out . println ( " 导入证书成功,dn: " + dn ) ;
System . out . println ( " ------------------------------------------------------------------------------------ " ) ;
String cert1 = api . getCertByDn ( dn , 0 ) ;
String cert1 = api . getCertByDn ( SM2dn , 0 ) ;
System . out . println ( " 查询证书: " + cert1 ) ;
System . out . println ( " ------------------------------------------------------------------------------------ " ) ;
// boolean delFlag = api.deleteCert(dn);
@@ -442,8 +454,8 @@ public class Test4NongxinCW {
" KFQCIAXZTL6VPtW67tM/DF4ZgFt5S/YIiFombKa2bWOfL81u \ n " +
" -----END CERTIFICATE----- " ;
List < String > masterNodes = new ArrayList < > ( ) ;
masterNodes . add ( " 172.1.41.1 9:8889 " ) ;
masterNodes . add ( " 172.1.41.9:8889 " ) ;
masterNodes . add ( " 172.1.41.96 :8889 " ) ;
masterNodes . add ( " 172.1.41.13 9:8889 " ) ;
int timeout = 100 ;
Map < String , String > map = new HashMap < > ( ) ;
map . put ( " snmp.target.ip " , " 172.1.1.191 " ) ;
@@ -511,16 +523,22 @@ public class Test4NongxinCW {
@Test
public void testDE ( ) {
SydApi4j sydApi4j = new SydApi4j ( ) ;
// String SM2dn = "C=CN,ST=北京,L=北京,O=信雅达,CN=172.1.40.188";
// 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 ) ) ;
// //数字信封
// 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));
String SM2dn = " C=CN,ST=北京,L=北京,O=信雅达,OU=双证,CN=172.1.40.188 " ;
String ivHex = " 31323334353637383132333435363738 " ;
RetWrap genByDn = api . generateDEByDnICBC ( SM2dn , ivHex , orgData , 1 ) ;
String cipherKey1 = ( String ) genByDn . get ( SydApi . RET_CIPHER_KEY ) ;
System . out . println ( " SM2数字信封: " + cipherKey1 ) ;
}
@Test
@@ -544,7 +562,7 @@ public class Test4NongxinCW {
public void convert ( ) throws Exception {
//原始证书
String cert =
" MIIC3D CCAoC gAwIBAgIFIGiRZIY wDAYIKoEcz1UBg3UFADBd MQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRw wGg YDVQQDDBN DRkNBIFRFU1QgU00yIE9DQTExMB4XDTI0MDgxNTA4MzAxMloXDTI3 MDI wMTA4MzAxMlowgZExCzAJBgNVBAYTAmNuMR8wHQYDVQQKDBZDRkNBIENTIFRFU1QgU00yIE9DQTExMQ4wDAYDVQQLDAVDTkFQUzEZMBcGA1UECwwQT3JnYW5pemF0aW9uYWwtMTE2MDQGA1UEAwwtMDUxQFozMTM1ODEwMDMyODRAMzEzNTgxMDAzMjg0Q05BUFMyQDAwMDAwMDAxMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEFRjj5zgEwAnsF7hh6RVJfXSdybPBGBlF7gsVOUX5tU7E0YN/eYZk9j1jbOCrBWz611gsr+HkU0OZsFFlQTattK OB9T CB8j AfBgNVHSMEGDAWgBS+pn5NPXyPoFXmwS8JLiwgQ7NCfz BIBgNVHSAEQTA/MD0GCGCBHIbvKgEC MDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2ZjYS5jb20uY24vdXMvdXMtMTU uaHRtMDo GA1UdHwQz MDE wL6At oCu GKW h0dHA6Ly8yMTAuNzQuNDIuMy9PQ0ExMS9TTTIvY3JsMjkyODkuY3JsMAsGA1UdDwQEAwID6DAdBgNVHQ4EFgQUDONZoezPmMkCIHifM0KK9y0N8bQwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMEMAwGCCqBHM9VAYN1BQADSAAwRQIhAKesbWSJQXAHBoLvTbtM+CP7eqwfBMQc0nRridvyXOPOAiAp2Zr1Ncren8n2U1XP4tWeYp1YyPBMke0BSlOFunJ0Jg== " ;
" MIICuj CCAl6 gAwIBAgIFEFeGNUI wDAYIKoEcz1UBg3UFADBc MQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRs wGQ YDVQQDDBJ DRkNBIFRFU1QgU00yIE9DQTEwHhcNMjMxMDI2MDYwMDU5WhcNMjgxMDI2 MDY wMDU5WjByMQswCQYDVQQGEwJjbjEXMBUGA1UECgwOQ0ZDQSBURVNUIE9DQTExDTALBgNVBAsMBERFTVAxGTAXBgNVBAsMEE9yZ2FuaXphdGlvbmFsLTExIDAeBgNVBAMMFzA0MUBaREVNUEBERU1QQDAwMDAwMDAxMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAE3NOLwnCvPxeZxS5lUSl+fxojdYwV1mD5eDGOkPeATl88oW0Q1PuBd0aQ29HmufRamZb2BlfLhjcgS5TsKlX4qq OB9D CB8T AfBgNVHSMEGDAWgBRr/hjaj0I6prhtsy6Igzo0osEw4T BIBgNVHSAEQTA/MD0GCGCBHIbvKgEB MDEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2ZjYS5jb20uY24vdXMvdXMtMTQ uaHRtMDk GA1UdHwQy MDA wLqAs oCq GKG h0dHA6Ly91Y3JsLmNmY2EuY29tLmNuL1NNMi9jcmw1Mzg2My5jcmwwCwYDVR0PBAQDAgPoMB0GA1UdDgQWBBSElGKzsZJ04RMd60sFqiHpxl9/njAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwQwDAYIKoEcz1UBg3UFAANIADBFAiEAjmCCIlDNdXw0qRZe7oYrkel4wTpg++c/C+MKLbPfRpgCIEVyrM68qeuVmaFZ5ZA3TtUXQg1RYQjz/5yhl/3jhdQ9 " ;
byte [ ] s = Base64 . getDecoder ( ) . decode ( cert ) ;
System . out . println ( convertToPem ( s ) ) ;
}