package sample; import cn.hutool.core.codec.Base64; import com.sunyard.RetWrap; import com.sunyard.SydApi; import com.sunyard.SydApiException; import com.sunyard.cert.X509; import com.sunyard.proto.Util; import com.sunyard.util.ASN1Util; import com.sunyard.util.SYMUtil; import org.junit.Test; import racal.sunyard.main.SydApi4j; import racal.sunyard.main.SydApiBuilder; import java.io.UnsupportedEncodingException; 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 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 ]; public static void main(String[] args) { System.setProperty("com.sunyard.sydapi4j.debug", "true"); System.setProperty("com.sunyard.dnsort", "true"); //设置连接 SydApiBuilder builder = new SydApiBuilder().setIp("172.1.41.139"); SydApi4j api = (SydApi4j) builder.build(); try { //SM2裸签 byte[] nakedSign = api.SYD_NakedSign(SM2dn, orgData, null); boolean b1 = api.SYD_NakedVerify(SM2dn, nakedSign, orgData, null); System.out.println(b1); 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 ); //RSA裸签 byte[] nakedSign2 = api.SYD_NakedSignAll(1,orgData, RSAdn); System.out.println("RSA大数据裸签:"+ Util.bytes2HexString(nakedSign2)); boolean nakedVerify2 = api.SYD_NakedVerifyAll(1,orgData, nakedSign2, RSAdn); System.out.println("RSA大数据验签:"+nakedVerify2 ); byte[] nakedSign3 = api.SYD_NakedSignAll(4,orgData, SM2dn); System.out.println("SM2裸签:"+ Util.bytes2HexString(nakedSign3)); boolean nakedVerify3 = api.SYD_NakedVerifyAll(4,orgData, nakedSign3, SM2dn); System.out.println("SM2验签:"+nakedVerify3 ); byte[] nakedSign4 = api.SYD_NakedSignAll(2,orgData, RSAdn); System.out.println("RSA裸签:"+ Util.bytes2HexString(nakedSign4)); boolean nakedVerify4 = api.SYD_NakedVerifyAll(2,orgData, nakedSign4, RSAdn); System.out.println("RSA验签:"+nakedVerify4 ); String s = api.detachedSignAll(4, orgData, SM2dn); System.out.println("SM2detach签名:"+s); boolean b = api.detachedVerifyAll(4, orgData, s); System.out.println("SM2detach验签:"+b); String sde = api.detachedSignAll(4, orgDataBig, SM2dn); System.out.println("SM2detach签名:"+sde); boolean bde = api.detachedVerifyAll(4, orgDataBig, sde); System.out.println("SM2detach验签:"+bde); String rsa = api.detachedSignAll(2, orgData, RSAdn); System.out.println("RSA detach签名:"+rsa); boolean br = api.detachedVerifyAll(2, orgData, rsa); System.out.println("RSA detach验签:"+br); String det = api.detachedSignAll(3, orgDataBig, RSAdn); System.out.println("RSA大数据detach签名:"+det); boolean boo = api.detachedVerifyAll(3, orgDataBig, det); System.out.println("RSA大数据detach验签:"+boo); } catch (SydApiException e) { throw new RuntimeException(e); } finally { api.disconnect(); } } @Test public void testDetach() throws UnsupportedEncodingException { System.setProperty("com.sunyard.sydapi4j.debug", "true"); //设置连接 SydApiBuilder builder = new SydApiBuilder().setIp("172.16.17.161").setPort(8889).setTimeout(3000); SydApi4j api = (SydApi4j) builder.build(); String dnn="C=CN,O=CFCA OCA1,OU=TPC-S3,OU=Organizational-2,CN=ARCU54H100000024"; String plain="tran/acctTran62177883001300140426200548800010650170测试60001"; String signed = "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"; boolean boo = api.detachedVerifyAll(3, plain.getBytes(), signed); System.out.println("RSA大数据detach验签:"+boo); plain.getBytes("UTF-8"); } @Test public void p1Test() throws UnsupportedEncodingException { // 调试模式 // System.setProperty("com.sunyard.sydapi4j.debug", "true"); // 建立连接 String certDn ="C=CN,O=Sunyard,OU=8001,CN=8001"; String DN = "C=CN,OU=eves,CN=jindiancloud"; String Sm2DN="C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"; //设置连接 SydApiBuilder builder = new SydApiBuilder().setIp("172.16.17.161").setPort(8889).setTimeout(3000); SydApi4j api = (SydApi4j) builder.build(); byte[] oData = new byte[10]; //p1签名 byte[] sign = api.SYD_NakedSignAll(4,oData, Sm2DN); // System.out.println("p1签名:"+ Util.bytes2HexString(sign)); String base64Sign = Util.encodeBase64(sign); System.out.println("p1签名:"+ base64Sign); // boolean pass = api.SYD_NakedVerifyAll(4,oData,sign, Sm2DN); // System.out.println("验签结果 " + pass); // // String certByDn = api.getCertByDn(Sm2DN,0); // X509 x509 = api.GetX509CertInfo(certByDn); // byte[] pubKey = x509.getPubKey(); // System.out.println("公钥:"+Util.bytes2HexString(pubKey)); // // String s = api.SYD_SM2_Sign_HA("8012", 1, pubKey, oData); // System.out.println("公钥签名:"+s); // // hihi String sign2 ="svVyVaA6Og8QCWagGBdohDuIh/Lhb34Lv6Kc+3OE0GVVPdYxi9+zM6IBq6ZxEjuyIRPnxy1GCdye5I9hEOqZuQ=="; byte[] bytes = SYMUtil.base64Sign2DerSign(sign2); System.out.println(Util.bytes2HexString(bytes)); //byte[] bytes2 = SYMUtil.base64SignAsDerSign(sign2); byte[] bytes2 = SYMUtil.base64SignAsDerSign(Util.encodeBase64(bytes)); System.out.println(Util.bytes2HexString(bytes2)); List allCert = api.getAllCert(); System.out.println(allCert); // String Data= "\n" + // " \n" + // " 400027000000000202305300000000931\n" + // " 2023-05-30T18:04:12\n" + // " \n" + // " 4000270000000002023053000000009312023-05-30T18:06:46400027日照德润建筑工程有限公司91371100773158280DDT02日照德润建筑工程有限公司803011301421013273000041816PS013300000009831853731346340004320230530000114152000000000001,00000200000020000.000.01
2023-05-30
BC02CC00
\n" + // " 0\n" + // " \n" + // " 731346340004320230530000114152\n" + // " 000000000001,000002000000\n" + // " 20000.00\n" + // " 0.01\n" + // " \n" + // " \n" + // " ME02\n" + // " AC02\n" + // " CS03\n" + // " 2023-05-30\n" + // " 2023-05-31\n" + // " \n" + // "
"; // // String Data2 =""; // String pk= "A0IABNTSZikiGRMscOVhIvGntbsvhz+fe8y/WqFSc10IwiAs6vuAYaN/RJ5/cFHDsC08I+vJOiiRFZPRe3vgAHad8Hs="; // String sign2 ="MEYCIQDiIjaN/OXnEwHEIoTVR8ADB47FzEI4kb9VVIe0au1gVgIhAKNqfCeu6NAs9bFF1IrJvUDYvZTKRIM1OkKDQU8trSfY"; // boolean verify_ha = api.SYD_SM2_Verify_HA(1, Util.decodeBase64(pk), Data.getBytes(), sign2); // System.out.println("公钥验签2:"+verify_ha); } @Test public void test4SLS() throws UnsupportedEncodingException { System.setProperty("com.sunyard.sydapi4j.debug", "true"); String DN = "C=CN,OU=eves,CN=jindiancloud"; //设置连接 SydApiBuilder builder = new SydApiBuilder().setIp("172.16.17.161").setPort(8889).setTimeout(3000); SydApi4j api = (SydApi4j) builder.build(); String Data ="{\"head\":{\"SrcCode\":\"C00000000002\",\"SigCerNo\":\"0000000000000001\",\"ReqTime\":\"20221115175955\",\"TranCode\":\"T1001\",\"ReqSeqNo\":\"C1002003000120221103101855000001\",\"DesCode\":\"B00000000005\"},\"body\":{\"AccNo\":\"76690188000100128\",\"RequestCode\":\"B00000000005\",\"ReceiveCode\":\"C00000000002\",\"CurrCod\":\"CNY\",\"PushEves\":\"1\",\"VouDate\":\"20221012\",\"CallUrl\":\"192.44.2.97:31003\",\"IsStore\":\"1\",\"VouNo\":\"20221103031\",\"AntiTamperSign\":\"7e0ef4b1d7cac4c15b070af3fdbb574eed51e960b998a8c67db8287691d14e74\"}}"; String base64Data="eyJoZWFkIjp7IlNyY0NvZGUiOiJDMDAwMDAwMDAwMDIiLCJTaWdDZXJObyI6IjAwMDAwMDAwMDAwMDAwMDEiLCJSZXFUaW1lIjoiMjAyMjExMTUxNzU5NTUiLCJUcmFuQ29kZSI6IlQxMDAxIiwiUmVxU2VxTm8iOiJDMTAwMjAwMzAwMDEyMDIyMTEwMzEwMTg1NTAwMDAwMSIsIkRlc0NvZGUiOiJCMDAwMDAwMDAwMDUifSwiYm9keSI6eyJBY2NObyI6Ijc2NjkwMTg4MDAwMTAwMTI4IiwiUmVxdWVzdENvZGUiOiJCMDAwMDAwMDAwMDUiLCJSZWNlaXZlQ29kZSI6IkMwMDAwMDAwMDAwMiIsIkN1cnJDb2QiOiJDTlkiLCJQdXNoRXZlcyI6IjEiLCJWb3VEYXRlIjoiMjAyMjEwMTIiLCJDYWxsVXJsIjoiMTkyLjQ0LjIuOTc6MzEwMDMiLCJJc1N0b3JlIjoiMSIsIlZvdU5vIjoiMjAyMjExMDMwMzEiLCJBbnRpVGFtcGVyU2lnbiI6IjdlMGVmNGIxZDdjYWM0YzE1YjA3MGFmM2ZkYmI1NzRlZWQ1MWU5NjBiOTk4YThjNjdkYjgyODc2OTFkMTRlNzQifX0="; System.out.println("原数据base64:"+Util.encodeBase64(Data.getBytes())); String sign ="rNHjcF+QQezzrbtYRtBKSe7zyr304vtTBb+3rZHVYrzHHlW1DI6cDOdjyCdFkYQHiFsz/XfgrUIZqHA1kMgjUg=="; byte[] decode64sign = SYMUtil.base64Sign2DerSign(sign); boolean pass = api.SYD_NakedVerifyAll(4,Data.getBytes() ,decode64sign, DN); System.out.println("验签结果:"+pass); } @Test public void test(){ System.setProperty("com.sunyard.sydapi4j.debug", "true"); //设置连接 SydApiBuilder builder = new SydApiBuilder().setIp("172.16.17.64"); SydApi4j api = (SydApi4j) builder.build(); String cert = "-----BEGIN CERTIFICATE-----\n" + "MIIDcTCCAlmgAwIBAgIFEEcHQmgwDQYJKoZIhvcNAQEFBQAwWDELMAkGA1UEBhMC\n" + "Q04xMDAuBgNVBAoTJ0NoaW5hIEZpbmFuY2lhbCBDZXJ0aWZpY2F0aW9uIEF1dGhv\n" + "cml0eTEXMBUGA1UEAxMOQ0ZDQSBURVNUIE9DQTEwHhcNMjExMjEwMDgyOTA0WhcN\n" + "MjYxMjEwMDgyOTA0WjBoMQswCQYDVQQGEwJDTjESMBAGA1UEChMJQ0ZDQSBPQ0Ex\n" + "MQ8wDQYDVQQLEwZUUEMtUzMxGTAXBgNVBAsTEE9yZ2FuaXphdGlvbmFsLTExGTAX\n" + "BgNVBAMTEEFSQ1U1MjkxMDAwMDA3MDEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJ\n" + "AoGBAL+kPIjcWzRwQE6Q3ydtQsDaJGMxv0At2WrIQqb9ONEvqMbQZCd69qfBvsRj\n" + "QI/UlG3btk6P/ZBGkNc99fX43VMqPtIlVjgRozLQcQJPFbiU5cT5PPqnrxo652RU\n" + "KNFQhwmanPjAjmZd9woc2l0BnfF92QFDPDRprS1fWLFbKPTvAgMBAAGjgbUwgbIw\n" + "HwYDVR0jBBgwFoAUz3CdYeudfC6498sCQPcJnf4zdIAwOQYDVR0fBDIwMDAuoCyg\n" + "KoYoaHR0cDovL3VjcmwuY2ZjYS5jb20uY24vUlNBL2NybDgzMjA1LmNybDALBgNV\n" + "HQ8EBAMCA+gwHQYDVR0OBBYEFGey5r5CdOUDaW3KRdZ0xg19n+dhMCgGA1UdJQQh\n" + "MB8GCCsGAQUFBwMCBggrBgEFBQcDBAYJKoZIhvcvAQEFMA0GCSqGSIb3DQEBBQUA\n" + "A4IBAQChyjTNJUkdspDa/6sPYuZdE0/yPFcbd0ag4wLWrSCiRyV0J5BhJPIApdRT\n" + "3kCIem2jRbq3H/W1vUYi1JeGHcrvTOOMQb9yfgCzfQLvAdv0at4zupy1uXL6uE1S\n" + "WL1v6Vub630tJ0A45KsVESB5Fb+UZ/cvdJIMHjcYYzPw+HHH6q9e3R0QUMz3Mxpl\n" + "DCg66HQBL/jKSl/w13QTdRPL9dSDBtpzDqZH5JQK4rbZSdFnbC2TQs+ljsKd5TCg\n" + "52HcC92peeCXCEsb3Zw0js5nTbX+1da8FgqDQTeKIItgXBvQIRJUeelKga6opRNM\n" + "QM0Egoc/dBdM45jVnxzpreRKzsDQ\n" + "-----END CERTIFICATE-----"; String odata = "BankAcctTransfer1710469760912INNERDEBIT966229539600100010640王二类1566217788308301020599王二类1402/402361018886安徽农金00.001001"; String signRsa = "0564FC7C0E3FDAF225295BBD0E32BF16081D561B4C262B5E095E04E828DC8AAC71723F849B615A41AA012FB9B532017D382919A498A93EAD35CB3AA80BA29510C174BF61B6E5DCEA78DF9AF7C3B80513BA82F82030347F463C03826C90CC9C207012BD456C21D9DF4E2C79EE042B8BE229EA3C40F232AF661BE63E61A07DC2A3"; try { String rsaDn = "C=CN,O=CFCA OCA1,OU=TPC-S3,OU=Organizational-1,CN=ARCU529100000701"; boolean nakedVerify2 = api.SYD_NakedVerifyAll4NX(cert,2,odata.getBytes(),Util.hexString2Bytes(signRsa),rsaDn); System.out.println("RSA数据验签:"+nakedVerify2 ); } catch (SydApiException e) { e.printStackTrace(); } } }