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; /** * @Author:Cheney * @Date:2023/8/19 16:24 */ public class Test4WL { private SydApi4j api; final String SM2dn = "C=CN,ST=zz,L=zz,O=zzz,CN=zzzzz"; 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); } @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 * @param hash 摘要hash * @return 裸签签名数据 */ byte[] nakedSign = api.SYD_NakedSign(SM2dn, orgData, (byte[]) null); boolean b = api.SYD_NakedVerify(SM2dn, nakedSign, orgData, (byte[]) null); } @Test //sm2算法 public void sm2signhash(){ byte[] sm3Hash = api.SM3Hash(orgData); byte[] nakedSign = api.SYD_NakedSign(SM2dn, null, sm3Hash); boolean b = api.SYD_NakedVerify(SM2dn, nakedSign, null, sm3Hash); } @Test //rsa算法 public void rsasign(){ /** * 正常证书 SM2 P1 裸签签名 * @param orgData 原始数据 * @param sm2Dn 签名者证书 DN * @param hash 摘要hash * @param rFlag 摘要算法标识 * @return 裸签签名数据 */ byte[] nakedSign = api.SYD_NakedSign(2, RSAdn,orgData,(byte[])null); boolean b = api.SYD_NakedVerify(2, RSAdn, nakedSign, orgData, (byte[]) null); } @Test //rsa算法 public void rsasignhash(){ byte[] hash = api.itHash(2, orgData); byte[] nakedSign = api.SYD_NakedSign(2, RSAdn,null,hash); boolean b = api.SYD_NakedVerify(2, RSAdn, nakedSign, null, hash); } @Test //sm2数字信封加密解密 public void sm2gen(){ /** * SM2数字信封生成 * @param sm2Dn 证书DN * @param orgData 原始数据 * @return 加密后的数据 */ RetWrap genByDn = api.generateDEByDn(SM2dn, orgData); byte[] cipherKey = (byte[]) genByDn.get(SydApi.RET_CIPHER_KEY); System.out.println("SM2数字信封: " + new String(cipherKey)); /** * SM2数字信封解密 * @param sm2Dn 证书DN * @param cipherKey 数字信封加密数据 * @return 解密后的数据 */ RetWrap denSM2 = api.decryptDEByDN( SM2dn, cipherKey); byte[] oData = (byte[]) denSM2.get("oData"); System.out.println("SM2信封解密:"+ Util.bytes2HexString(oData)); } @Test //rsa 数字信封解密 public void rsagen(){ /** * RSA数字信封生成 * @param alg 默认为4 RSA数字信封格式 * @param rsaDn 证书DN * @return 加密后的数据 */ RetWrap genByDnRSA = api.generateDEByDnRSA(5,RSAdn, orgData); byte[] cipherKeyRSA = (byte[]) genByDnRSA.get(SydApi.RET_CIPHER_KEY); System.out.println("RSA数字信封: " + new String(cipherKeyRSA)); /** * RSA数字信封解密 * @param alg 默认为4 RSA数字信封格式 * @param rsaDn 证书DN * @param cipherKeyRSA 数字信封加密数据 * @return 解密后的数据 */ RetWrap denRSA = api.decryptDEByDNRSA(5, RSAdn,cipherKeyRSA); byte[] oData = (byte[]) denRSA.get("oData"); System.out.println("RSA信封解密:"+Util.bytes2HexString(oData)); } @Test //非对称加密解密 public void sm2genKey(){ /** * 生成非对称密钥 * @param userId 密钥索引 * @param nKeyType 密钥用途 0签名 1加密 默认为0 * @return 公私钥对 */ RetWrap ret1 = api.SYD_SM2GenKeyPair("3334", 0); String pk = (String) ret1.get("publicKey"); System.out.println("公钥:"+pk); String sk = (String) ret1.get("privateKey"); System.out.println("私钥:"+sk); } @Test public void sm2ende(){ String PublicKey ="0342000465CF1C97434A84B1AD48C61687C29FD7E19CD97D4AA7C5729AE6A734216A9E9CF6922E5BB575286ADA1BF284954F927BC4C0963BCA9923EB5EF77D733047AD5D"; String PrivateKey="1E7E958B645C5B662EC73D91EEF2116AEC46B7165A26D3C5A30602BBE100DBBA"; /** * 非对称密钥加密 * @param publicKey 公钥钥串,DER 编码,HEX 格式 * @param orgData 原始数据 * @return 加密的数据 base64 编码 */ String sm2Encrypt = api.SM2Encrypt(Util.hexString2Bytes(PublicKey), orgData); System.out.println("SM2加密:"+sm2Encrypt); /** * 非对称密钥解密 * @param sk 私钥,DER 编码,HEX 格式 * @param sm2Encrypt 待解密的数据 * @param userId 密钥索引 * @return 解密后的数据 */ byte[] sm2Decrypt = api.SM2Decrypt(Util.hexString2Bytes(PrivateKey), sm2Encrypt); System.out.println("SM2解密:"+Util.bytes2HexString(sm2Decrypt)); } @Test public void rsagenKey(){ /** * 生成非对称密钥 * @param userId 密钥索引 * @param nKeyType 密钥用途 0签名 1加密 默认为0 * @return 公私钥对 */ RetWrap ret1 = api.SYD_RSAGenKeyPair("2244", 0); String pk = (String) ret1.get("publicKey"); System.out.println("公钥:"+pk); String sk = (String) ret1.get("privateKey"); System.out.println("私钥:"+sk); } @Test public void rsaende(){ String PublicKey ="3082010A0282010100BB7A3E7738AD388FFC70384F94B0D28E371F085A9FAAF294757540ED042E22C5DBE8F724F2BBB0C096E39AB6FAA53DB565470AC9111B38794E535613E6A029964C961DB9FD6C6C4B4D67C6D03CD00C0A23CE7D87FF57EFD0D2DFB55D540090607788FE133B7278868D9E2C2C4096714AC7262A24840CBFB153C1B4B9065513297BB45145B4271427D1388F47A81EBA10DABE5D6C204C425B599B052334B3BA62225E744F0779F094EA762386358BA2048CE954877789C9E3ED8309A6BFE74DC465B50DC3E8DA4D3C2DAF1CC60368D897F50CCE75454B1F8079AD05438A6B8674578D2E933DFF4A8BA62E14D600FBECC4AC0B87F87BE908F1EE8C424C6963A4650203010001"; String PrivateKey="0008000029F1A527C90D0218CE7DDBB1AF9AF62DA63C8367D11282882823FA078DB80C0023EF7798498D1F28DF24586E58CB238B74A40D3500114D94712789580EFF7DC37DF8A5D8603F7A7AE5C3E428A0A6B8152492B5BCE7402DB910D331B3E8C107C2367D93454FD772838C4620E5AD89670025006B335B0908ED6472950A1CBD56C482B8AA1C59051A2A4B79680B8A4405C0A61AB91BF6D55E902154221A100EA35A599FA76A5565E21F9DDF02EDA99C352C8239620E4577246DE2016CBAC91411C376250BA2C93ACFEA76CF71BC2E3D45786060FEC0CFC262320FEC64C0B2FB2B8F2434C5E31595D0372EF101EE190CA08990DB15BE986284BDF917C0267BE389C326406EB1FF655BD526406EB1FF655BD526406EB1FF655BD526406EB1FF655BD526406EB1FF655BD526406EB1FF655BD526406EB1FF655BD526406EB1FF655BD526406EB1FF655BD526406EB1FF655BD526406EB1FF655BD526406EB1FF655BD526406EB1FF655BD526406EB1FF655BD526406EB1FF655BD526406EB1FF655BD526406EB1FF655BD526406EB1FF655BD526406EB1FF655BD526406EB1FF655BD526406EB1FF655BD526406EB1FF655BD526406EB1FF655BD526406EB1FF655BD526406EB1FF655BD526406EB1FF655BD526406EB1FF655BD526406EB1FF655BD526406EB1FF655BD526406EB1FF655BD526406EB1FF655BD507DB20DEBFFDD441665A886120DC74C762DD83A122CA4BE25535C1DE3D1AE57E5CE157E90F0A1BF82CD8356B33B17C7021C3BB46055AB094B6DD2BCD75AF0E6AA0F0FD9C235940B4C999726C2636399938BF3ACD0DD8001DF706AA6EB919168B46D20D5856A7217CD397512FF0697FA61FAE015BC3A204ACF670C9372289468137B2D9782E28CE95A74195228CAD601AA571DCFF5F2AABE5378688F0D4685DFDFEBC0C82FAC2645A62510ACDD8BD59C9712BC0408F11ABFD7B39FD3DBFE4FBA1357406BFCCAD4C3B035050603EA7DF322142DBBBAA9EEA6BBF02DD6B7D940648B6F9947530AA0F1A34BAA1BDC5AD5D30BBBD5E17F75CC2D418A63773383D1C83A10BD7C5011CF340BAA36CDEF541B9CE87CB0C80D0232D6F02D4F9CEAC7A470187CB5ABDC3BB97FD5A6804FE2FDF8018478C7F6B89371D7BFE7708B528A29314860280D9361731BC9C1436675D63C59FB3C9D09094D24F5FA201352B12225A0809811B3EA335ABEF8C2F6BAA2CBEF3F7FFC2E7417927229FCF11F8ACEC3D04F916CA9C348894987BF3EAEDD73542E394101BD5E974771C6FA2AB7E853BDF7058F6EC85A35B87124B574642BF2754747DA13A607037F748E8440BA474C04B575FB494C30BD19239BCDBF1C6A75B97BC6B4746D360A5C5E61C672D35E784A8195D55A2F05744CFAFC2DC987ACC1DE00950B326A66F00CE8E443B27FF0DFD596B33A43F66062C08B5C7A6D008DE8AC457E758FACA6586712E4535F389F29383E6A07FC60023C6627EB01EAEA4F4E55749237910B363D16DBCFC5E9524A4DE1B08AC6ECEB50DBA8176F0E864CB28F74E018B654B2BD8568E97B4C87BB024BE2582FA3FC01BBC2E1CC8993EA9842194AF3A4761E0B316DC2698746E3AF6253589BCDBC7F8818CD4BBC563C740A680FEB5589213E075D206B8498031FC874B565948FAED3D8381674E8013E2B3DB9AA153B6C087B041F3CA565DB3287B6ED16D3431D1F241449287A98DFFF59A505D41F41993DA2FB2189B056A58F261AAD46CAA683C0D3E6F631D426517769F9D53D9712F65B4F1B5125FBE9F60AE3B4910B9E1B39C49143E01F4ED744DE14A2A416DE125BC0137B8A967406B4122E26392537B6208DA4271BD34EED535DDEB2CA281145FC8E13DA2CF1F026858D86DA5EDE13BA577173158B0E4DBF57164A4E443210054B0CE41706CED0E3E08A86C4D286EFA47E51934F65B871E923B0F607DB6211E4EF12671F9FA93B0F476527D788A7CC47DB46F527B877E7CE87A"; /** * 非对称密钥加密 * @param publicKey 公钥钥串,DER 编码,HEX 格式 * @param orgData 原始数据 * @return 加密的数据 base64 编码 */ String RSAEncrypt = api.RSAEncrypt(PublicKey, orgData); System.out.println("RSA加密:"+RSAEncrypt); /** * 非对称密钥解密 * @param sk 私钥,DER 编码,HEX 格式 * @param RSAEncrypt 待解密的数据 * @param userId 密钥索引 * @return 解密后的数据 */ byte[] RSADecrypt = api.RSADecrypt(PrivateKey, RSAEncrypt); System.out.println("RSA解密:"+Util.bytes2HexString(RSADecrypt)); } }