配合网联接口
This commit is contained in:
parent
62598e0c89
commit
ffd19acbfc
66
DProto/GN.xml
Normal file
66
DProto/GN.xml
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<packet extend="base">
|
||||||
|
<req>
|
||||||
|
|
||||||
|
<command>
|
||||||
|
<hex>GN</hex>
|
||||||
|
</command>
|
||||||
|
<data extend="data">
|
||||||
|
|
||||||
|
<Esign len="1" cn="E值">
|
||||||
|
<text>1</text>
|
||||||
|
</Esign>
|
||||||
|
|
||||||
|
<keyLen len="4" cn="密钥长度">
|
||||||
|
<text>2048</text>
|
||||||
|
</keyLen>
|
||||||
|
|
||||||
|
|
||||||
|
<sk len="27" cn="私钥索引"></sk>
|
||||||
|
|
||||||
|
<startTime len="8" cn="启用时间"></startTime>
|
||||||
|
|
||||||
|
<endTime len="8" cn="到期时间"></endTime>
|
||||||
|
|
||||||
|
</data>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</req>
|
||||||
|
<res>
|
||||||
|
|
||||||
|
<command>
|
||||||
|
<hex>QO</hex>
|
||||||
|
</command>
|
||||||
|
<data>
|
||||||
|
<error len="2" cn="错误码" format="X" :catch="catchError('%s')">
|
||||||
|
<options>
|
||||||
|
<option cn="无错误">
|
||||||
|
<hex>00</hex>
|
||||||
|
</option>
|
||||||
|
<option cn="无效的哈希标识">
|
||||||
|
<hex>05</hex>
|
||||||
|
</option>
|
||||||
|
<option cn="输入数据错">
|
||||||
|
<hex>15</hex>
|
||||||
|
</option>
|
||||||
|
<option cn="DSP 错误">
|
||||||
|
DSP 错误;报告给管理员。
|
||||||
|
<hex>47</hex>
|
||||||
|
</option>
|
||||||
|
<option cn="输入数据长度错误">
|
||||||
|
<hex>80</hex>
|
||||||
|
</option>
|
||||||
|
</options>
|
||||||
|
</error>
|
||||||
|
|
||||||
|
<pk len="270" cn="公钥"></pk>
|
||||||
|
<sk len="2824" cn="私钥"></sk>
|
||||||
|
|
||||||
|
</data>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</res>
|
||||||
|
<script> </script>
|
||||||
|
</packet>
|
||||||
@ -170,6 +170,99 @@ public class SydApi4j implements SydApi {
|
|||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public RetWrap SYD_SM2GenKeyPair(String userId, int nKeyType) {
|
||||||
|
ProtoQN proto = new ProtoQN();
|
||||||
|
String sk = "999999999999999999999999999";
|
||||||
|
if (userId != null) {
|
||||||
|
sk = SYMUtil.genPrivateKeyMark(userId, nKeyType == 0 ? "000" : "001", "00000001");
|
||||||
|
}
|
||||||
|
|
||||||
|
HashMap<String, Object> packet = new HashMap();
|
||||||
|
HashMap<String, Object> data = new HashMap();
|
||||||
|
packet.put("data", data);
|
||||||
|
PacketSN sn = PacketSN.gen();
|
||||||
|
packet.put("header", sn.getSn().array());
|
||||||
|
data.put("sk", sk);
|
||||||
|
// data.put("startTime", "20220101");
|
||||||
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
|
||||||
|
Date dt = new Date();
|
||||||
|
String startTime = sdf.format(dt);
|
||||||
|
data.put("startTime", startTime);
|
||||||
|
data.put("endTime", "20990101");
|
||||||
|
ByteBuffer bb = proto.rend(packet);
|
||||||
|
synchronized (this) {
|
||||||
|
bb = this.syncRead(this.syncSend(bb));
|
||||||
|
}
|
||||||
|
|
||||||
|
Packet p = proto.parse(bb);
|
||||||
|
Map<String, Object> ret = p.toMap();
|
||||||
|
if (!Arrays.equals(sn.getSn().array(), ((PacketSection) ret.get("header")).getBytes())) {
|
||||||
|
throw new SydApiException("包序号不匹配", -4);
|
||||||
|
} else {
|
||||||
|
ret = (Map) ret.get("data");
|
||||||
|
PacketSection error = (PacketSection) ret.get("error");
|
||||||
|
byte[] be = error.getBytes();
|
||||||
|
if ((be[0] ^ be[1]) != 0) {
|
||||||
|
throw new SydApiException(error.getInfo(), error.autoInt());
|
||||||
|
} else {
|
||||||
|
String pkv = ((PacketSection) ret.get("pk")).getString();
|
||||||
|
String skv = ((PacketSection) ret.get("sk")).getString();
|
||||||
|
RetWrap r = new RetWrap();
|
||||||
|
r.put("publicKey", "03420004" + pkv);
|
||||||
|
r.put("privateKey", skv);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public RetWrap SYD_RSAGenKeyPair(String userId, int nKeyType) {
|
||||||
|
ProtoGN proto = new ProtoGN();
|
||||||
|
String sk = "999999999999999999999999999";
|
||||||
|
if (userId != null) {
|
||||||
|
sk = SYMUtil.genPrivateKeyMark(userId, nKeyType == 0 ? "000" : "001", "00000001");
|
||||||
|
}
|
||||||
|
|
||||||
|
HashMap<String, Object> packet = new HashMap();
|
||||||
|
HashMap<String, Object> data = new HashMap();
|
||||||
|
packet.put("data", data);
|
||||||
|
PacketSN sn = PacketSN.gen();
|
||||||
|
packet.put("header", sn.getSn().array());
|
||||||
|
data.put("sk", sk);
|
||||||
|
// data.put("startTime", "20220101");
|
||||||
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
|
||||||
|
Date dt = new Date();
|
||||||
|
String startTime = sdf.format(dt);
|
||||||
|
data.put("startTime", startTime);
|
||||||
|
data.put("endTime", "20990101");
|
||||||
|
ByteBuffer bb = proto.rend(packet);
|
||||||
|
synchronized (this) {
|
||||||
|
bb = this.syncRead(this.syncSend(bb));
|
||||||
|
}
|
||||||
|
|
||||||
|
Packet p = proto.parse(bb);
|
||||||
|
Map<String, Object> ret = p.toMap();
|
||||||
|
if (!Arrays.equals(sn.getSn().array(), ((PacketSection) ret.get("header")).getBytes())) {
|
||||||
|
throw new SydApiException("包序号不匹配", -4);
|
||||||
|
} else {
|
||||||
|
ret = (Map) ret.get("data");
|
||||||
|
PacketSection error = (PacketSection) ret.get("error");
|
||||||
|
byte[] be = error.getBytes();
|
||||||
|
if ((be[0] ^ be[1]) != 0) {
|
||||||
|
throw new SydApiException(error.getInfo(), error.autoInt());
|
||||||
|
} else {
|
||||||
|
//String pkv = ((PacketSection) ret.get("pk")).getString();
|
||||||
|
byte[] pkv = ((PacketSection) ret.get("pk")).getBytes();
|
||||||
|
String skv = ((PacketSection) ret.get("sk")).getString();
|
||||||
|
RetWrap r = new RetWrap();
|
||||||
|
// r.put("publicKey", "03420004" + pkv);
|
||||||
|
r.put("publicKey", Util.bytes2HexString(pkv));
|
||||||
|
r.put("privateKey", skv);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String SYD_SM2_Get_Id_PublicKey_HA(
|
public String SYD_SM2_Get_Id_PublicKey_HA(
|
||||||
String pUserID,
|
String pUserID,
|
||||||
|
|||||||
@ -21,7 +21,8 @@ public class Test4Nongxin {
|
|||||||
private static final byte[] orgData = new byte[ 2*1024 ];
|
private static final byte[] orgData = new byte[ 2*1024 ];
|
||||||
private static final byte[] orgDataBig = new byte[ 10*1024 ];
|
private static final byte[] orgDataBig = new byte[ 10*1024 ];
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
//System.setProperty("com.sunyard.sydapi4j.debug", "true");
|
System.setProperty("com.sunyard.sydapi4j.debug", "true");
|
||||||
|
System.setProperty("com.sunyard.dnsort", "true");
|
||||||
//设置连接
|
//设置连接
|
||||||
SydApiBuilder builder = new SydApiBuilder().setIp("192.168.0.200");
|
SydApiBuilder builder = new SydApiBuilder().setIp("192.168.0.200");
|
||||||
SydApi4j api = (SydApi4j) builder.build();
|
SydApi4j api = (SydApi4j) builder.build();
|
||||||
|
|||||||
237
src/test/java/sample/Test4WL.java
Normal file
237
src/test/java/sample/Test4WL.java
Normal file
@ -0,0 +1,237 @@
|
|||||||
|
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,O=1,OU=1,CN=1";
|
||||||
|
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.16.18.91", 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));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
Loading…
Reference in New Issue
Block a user