Files
sydapi/src/test/java/sample/Test4WL.java
T
2025-05-30 16:21:39 +08:00

238 lines
10 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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));
}
}