120 lines
3.9 KiB
Java
120 lines
3.9 KiB
Java
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<String, String> certTime = api.getCertTime(SM2dn);
|
||
System.out.println(certTime.get("after"));
|
||
System.out.println(certTime.get("before"));
|
||
|
||
Util.bytes2HexString("aa".getBytes());
|
||
}
|
||
|
||
|
||
|
||
}
|
||
|