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; import java.util.HashMap; /** * @Author:Cheney * @Date:2024/8/09 16:24 */ public class SampleICBC { private SydApi4j api; final String SM2dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"; byte[] orgData = "12345678123456".getBytes(); @Before public void before() { // 通过设置debug的属性开启debug,如果不设置则默认不打开 System.setProperty("com.sunyard.sydapi4j.debug", "true"); //通过设置不校验证书是否反序 System.setProperty("com.sunyard.dnsort", "false"); api = (SydApi4j) new SydApi4j().connect("172.16.17.232", 8889, null, 1000); } @After public void after() { try { this.api.disconnect(); } catch (Exception e) { e.printStackTrace(); } } @Test //证书导入 public void importCert(){ String cert = "-----BEGIN CERTIFICATE-----\n" + "MIICMjCCAdWgAwIBAgIGAYqHSuwHMAwGCCqBHM9VAYN1BQAwSzELMAkGA1UEBhMC\n" + "Q04xDjAMBgNVBAoTBUdNU1NMMRAwDgYDVQQLEwdQS0kvU00yMRowGAYDVQQDExFN\n" + "aWRkbGVDQSBmb3IgVGVzdDAiGA8yMDIzMDkxMTE2MDAwMFoYDzIwMjQwOTExMTYw\n" + "MDAwWjBgMQswCQYDVQQGDAJDTjELMAkGA1UECAwCemoxCzAJBgNVBAcMAmh6MRAw\n" + "DgYDVQQKDAdzdW55YXJkMRAwDgYDVQQLDAd6eWhUZXN0MRMwEQYDVQQDDAp6eWhU\n" + "ZXN0U00yMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAEYB3P271TUdDKfUr0VbkL\n" + "v+N6QlrYcfAqbqjgqHaa3Xt5/8n3rHXp5ILj8QdU1pCFOF6xaaCwg1L7oR90MHZe\n" + "GKOBiTCBhjAbBgNVHSMEFDASgBD5f1W0J5QzYqZWym/MXRr/MBkGA1UdDgQSBBAK\n" + "g03SZSfU07aY4XNDfVIOMDEGCCsGAQUFBwEBBCUwIzAhBggrBgEFBQcwAYYVaHR0\n" + "cHM6Ly9vY3NwLmdtc3NsLmNuMAkGA1UdEwQCMAAwDgYDVR0PAQH/BAQDAgDAMAwG\n" + "CCqBHM9VAYN1BQADSQAwRgIhAK1lDGV1UtbYz5Hf8DCpq8UySCtu5dguh/eZsc4c\n" + "V9PtAiEA5SO99BSunZMtrpHFJC1XbEQ5Xp0zIJQvzjRqZwfkyrw=\n" + "-----END CERTIFICATE-----\n"; String dn = api.importCert(cert); System.out.println("返回证书主题:"+dn); } @Test //sm2算法 attach签名验签 public void sm2signAtt(){ String attachedSign = api.attachedSign(orgData, SM2dn); System.out.println("attach签名:"+attachedSign); boolean attachedVerify = api.attachedVerify(attachedSign); System.out.println("attach验签:"+attachedVerify); } @Test //sm2数字信封加密解密 public void sm2gen(){ String ivHex = "31323334353637383132333435363738"; /** * SM2数字信封生成 * @param sm2Dn 证书DN * @param IV iv * @param orgData 原始数据 * @param roundmod 轮模式 0 ECB 1 CBC * @return 加密后的数据 */ RetWrap genByDn = api.generateDEByDnICBC(SM2dn, ivHex,orgData,1); String cipherKey = (String) genByDn.get(SydApi.RET_CIPHER_KEY); System.out.println("SM2数字信封: " +cipherKey); /** * SM2数字信封解密 * @param sm2Dn 证书DN * @param IV iv * @param cipherKey 数字信封 * @param roundmod 轮模式 0 ECB 1 CBC * @return 加密后的数据 */ RetWrap denSM2 = api.decryptDEByDNICBC( SM2dn,ivHex, cipherKey,1); byte[] oData = (byte[]) denSM2.get("oData"); System.out.println("SM2信封解密:"+ new String(oData)); } @Test public void getTIme(){ HashMap certTime = api.getCertTime(SM2dn); System.out.println(certTime.get("after")); System.out.println(certTime.get("before")); Util.bytes2HexString("aa".getBytes()); } }