示例代码
This commit is contained in:
parent
37dd4ea78c
commit
1be35ace33
@ -1,14 +1,14 @@
|
|||||||
package com.sunyard.sydapi.test;
|
package com.sunyard.sydapi.test;
|
||||||
|
|
||||||
import com.sunyard.RetWrap;
|
import com.sunyard.RetWrap;
|
||||||
import com.sunyard.SydApi;
|
|
||||||
import com.sunyard.proto.Util;
|
import com.sunyard.proto.Util;
|
||||||
import racal.sunyard.main.SydApi4j;
|
import racal.sunyard.main.SydApi4j;
|
||||||
import racal.sunyard.main.SydApiBuilder;
|
import racal.sunyard.main.SydApiBuilder;
|
||||||
|
|
||||||
public class TestShangqingXingye {
|
public class TestShangqingXingye {
|
||||||
private static final String orgData = "12345678";
|
private static final byte[] orgDataBig = new byte[ 5 * 1024];
|
||||||
private static final String pcDnEN = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1";
|
private static final byte[] orgData2k = new byte[ 2 * 1024];
|
||||||
|
private static final String pcDnEN = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1";
|
||||||
|
|
||||||
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");
|
||||||
@ -24,11 +24,9 @@ public class TestShangqingXingye {
|
|||||||
* @param pcData: 明文数据。
|
* @param pcData: 明文数据。
|
||||||
* @return RetWrap: 数字信封
|
* @return RetWrap: 数字信封
|
||||||
*/
|
*/
|
||||||
RetWrap signData = api.generateDEByDn(pcDnEN, orgData.getBytes("GBK"));
|
RetWrap signData = api.generateDEByDn(pcDnEN, orgDataBig);
|
||||||
// String cpkey = (String)signData.get("CipherKey");
|
|
||||||
byte[] cpkey2 = (byte[]) signData.get("CipherKey");
|
byte[] cpkey2 = (byte[]) signData.get("CipherKey");
|
||||||
// System.out.println("加密信封:" + cpkey);
|
System.out.println("加密信封:" + new String(cpkey2));
|
||||||
System.out.println("加密信封:" + cpkey2);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 接收用私钥解密数字信封,还原原文。。
|
* 接收用私钥解密数字信封,还原原文。。
|
||||||
@ -36,9 +34,8 @@ public class TestShangqingXingye {
|
|||||||
* @param cpkey: 数字信封。
|
* @param cpkey: 数字信封。
|
||||||
* @return preData: 原数据
|
* @return preData: 原数据
|
||||||
*/
|
*/
|
||||||
//RetWrap oDataWrap = api.decryptDEByDN (pcDnEN,cpkey.getBytes());
|
RetWrap oDataWrap = api.decryptDEByDN(pcDnEN, cpkey2);
|
||||||
RetWrap oDataWrap = api.decryptDEByDN (pcDnEN,cpkey2);
|
byte[] preData = (byte[]) oDataWrap.get("oData");
|
||||||
byte[] preData = (byte[]) oDataWrap.get("oData");
|
|
||||||
System.out.println("解密信封:" + Util.bytes2HexString(preData));
|
System.out.println("解密信封:" + Util.bytes2HexString(preData));
|
||||||
|
|
||||||
|
|
||||||
@ -48,7 +45,7 @@ public class TestShangqingXingye {
|
|||||||
* @param pcDnEN: 签名者证书 DN
|
* @param pcDnEN: 签名者证书 DN
|
||||||
* @return signsData: 签名数据
|
* @return signsData: 签名数据
|
||||||
*/
|
*/
|
||||||
String signsData = api.SYD_SM2_DetachedSign_HA (orgData.getBytes("GBK"),pcDnEN);
|
String signsData = api.SYD_SM2_DetachedSign_HA(orgData2k, pcDnEN);
|
||||||
System.out.println("签名数据:" + signsData);
|
System.out.println("签名数据:" + signsData);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -57,14 +54,10 @@ public class TestShangqingXingye {
|
|||||||
* @param orgData: 待签名的原始数据
|
* @param orgData: 待签名的原始数据
|
||||||
* @param sign: 签名数据。
|
* @param sign: 签名数据。
|
||||||
*/
|
*/
|
||||||
boolean result = api.detachedVerify (1,orgData.getBytes("GBK"),signsData);
|
boolean result = api.detachedVerify(1, orgData2k, signsData);
|
||||||
System.out.println("验签结果:" + result);
|
System.out.println("验签结果:" + result);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 产生对称密钥,通过清算所公钥证书加密生成数字信封。
|
* 产生对称密钥,通过清算所公钥证书加密生成数字信封。
|
||||||
* 利用会员的私钥证书对数据进行签名
|
* 利用会员的私钥证书对数据进行签名
|
||||||
@ -74,7 +67,7 @@ public class TestShangqingXingye {
|
|||||||
* @param pcData: 明文数据。
|
* @param pcData: 明文数据。
|
||||||
* @return pcSignData: 签名数字信封
|
* @return pcSignData: 签名数字信封
|
||||||
*/
|
*/
|
||||||
String pcSignData = api.SYD_SignDigitalEnvelope(pcDnEN, pcDnEN, orgData.getBytes("GBK"));
|
String pcSignData = api.SYD_SignDigitalEnvelope(pcDnEN, pcDnEN, orgData2k);
|
||||||
System.out.println("签名数字信封:" + pcSignData);
|
System.out.println("签名数字信封:" + pcSignData);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -1,54 +0,0 @@
|
|||||||
package sample;
|
|
||||||
|
|
||||||
import com.sunyard.RetWrap;
|
|
||||||
import com.sunyard.SydApi;
|
|
||||||
import com.sunyard.cert.X509;
|
|
||||||
import com.sunyard.proto.Util;
|
|
||||||
import racal.sunyard.main.SydApi4j;
|
|
||||||
|
|
||||||
import java.io.UnsupportedEncodingException;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 上清例子
|
|
||||||
*/
|
|
||||||
public class Sample {
|
|
||||||
|
|
||||||
public static void main(String[] args) throws UnsupportedEncodingException {
|
|
||||||
|
|
||||||
// 通过设置debug的属性开启debug,如果不设置则默认不打开
|
|
||||||
System.setProperty("com.sunyard.sydapi4j.debug", "true");
|
|
||||||
// 单台加密机
|
|
||||||
SydApi api = new SydApi4j().connect("192.168.0.200", 8889, null, 1000);
|
|
||||||
|
|
||||||
try {
|
|
||||||
String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1";
|
|
||||||
byte[] orgData = new byte[2 * 1024 * 1024];
|
|
||||||
|
|
||||||
// 签名
|
|
||||||
String sign = api.attachedSign(orgData, dn);
|
|
||||||
System.out.println("签名结果: " + sign);
|
|
||||||
|
|
||||||
// 生成数字信封
|
|
||||||
RetWrap retWrap = api.generateDEByDn(dn, sign.getBytes());
|
|
||||||
byte[] cipherKey = (byte[]) retWrap.get(SydApi.RET_CIPHER_KEY);
|
|
||||||
System.out.println("数字信封: " + new String(cipherKey));
|
|
||||||
|
|
||||||
// 解密数字信封
|
|
||||||
RetWrap retWrap1 = api.decryptDEByDN(dn, cipherKey);
|
|
||||||
byte[] oData = (byte[]) retWrap1.get("oData");
|
|
||||||
System.out.println("原数据: " + retWrap1.get("oData"));
|
|
||||||
|
|
||||||
// 验签
|
|
||||||
RetWrap verify = api.attachedVerifyAndGetAll(oData);
|
|
||||||
if (verify != null) {
|
|
||||||
System.out.println("x509公钥: " + Util.bytes2HexString(((X509) verify.get("x509")).getPubKey()));
|
|
||||||
System.out.println("签名原数据: " + Util.bytes2HexString((byte[]) (verify.get("oData"))));
|
|
||||||
}
|
|
||||||
} finally {
|
|
||||||
if (null != api) {
|
|
||||||
api.disconnect();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
93
src/test/java/sample/ShangqingXingye.java
Normal file
93
src/test/java/sample/ShangqingXingye.java
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
package sample;
|
||||||
|
|
||||||
|
import com.sunyard.RetWrap;
|
||||||
|
import com.sunyard.proto.Util;
|
||||||
|
import racal.sunyard.main.SydApi4j;
|
||||||
|
import racal.sunyard.main.SydApiBuilder;
|
||||||
|
|
||||||
|
public class ShangqingXingye {
|
||||||
|
private static final byte[] orgData2k = new byte[ 2 * 1024];
|
||||||
|
private static final String pcDnEN = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1";
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
//System.setProperty("com.sunyard.sydapi4j.debug", "true");
|
||||||
|
long startTime = System.currentTimeMillis(); //获取开始时间
|
||||||
|
SydApiBuilder builder = new SydApiBuilder().setIp("192.168.0.100");
|
||||||
|
SydApi4j api = (SydApi4j) builder.build();
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 产生对称密钥,通过公钥加密生成数字信封,。
|
||||||
|
* @param pcDnEN: 清算所的公钥证书
|
||||||
|
* @param pcData: 明文数据。
|
||||||
|
* @return RetWrap: 数字信封
|
||||||
|
*/
|
||||||
|
RetWrap signData = api.generateDEByDn(pcDnEN, orgData2k);
|
||||||
|
byte[] cpkey2 = (byte[]) signData.get("CipherKey");
|
||||||
|
System.out.println("加密信封:" + new String(cpkey2));
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 接收用私钥解密数字信封,还原原文。。
|
||||||
|
* @param pcDnEN: 清算所的公钥证书
|
||||||
|
* @param cpkey: 数字信封。
|
||||||
|
* @return preData: 原数据
|
||||||
|
*/
|
||||||
|
RetWrap oDataWrap = api.decryptDEByDN(pcDnEN, cpkey2);
|
||||||
|
byte[] preData = (byte[]) oDataWrap.get("oData");
|
||||||
|
System.out.println("解密信封:" + Util.bytes2HexString(preData));
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过指定的私钥对指定的原始数据编制带公钥证书的数字签名(遵循PKCS#7),
|
||||||
|
* @param orgData: 待签名的原始数据
|
||||||
|
* @param pcDnEN: 签名者证书 DN
|
||||||
|
* @return signsData: 签名数据
|
||||||
|
*/
|
||||||
|
String signsData = api.SYD_SM2_DetachedSign_HA(orgData2k, pcDnEN);
|
||||||
|
System.out.println("签名数据:" + signsData);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 利用清算所的公钥证书对签名数据进行验签。
|
||||||
|
* @param dataType: 数据模式, 0:输入的数据为 HASH 后的数据, 1:输入的数据为原始数据库(本次传入1)
|
||||||
|
* @param orgData: 待签名的原始数据
|
||||||
|
* @param sign: 签名数据。
|
||||||
|
*/
|
||||||
|
boolean result = api.detachedVerify(1, orgData2k, signsData);
|
||||||
|
System.out.println("验签结果:" + result);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 产生对称密钥,通过清算所公钥证书加密生成数字信封。
|
||||||
|
* 利用会员的私钥证书对数据进行签名
|
||||||
|
* 上清所 SYD_SignDzigitalEnvelope (String pcDnEN, String pcDnSign, byte[] pcData);
|
||||||
|
* @param pcDnEN: 清算所的公钥证书
|
||||||
|
* @param pcDnSign:会员的私钥证书
|
||||||
|
* @param pcData: 明文数据。
|
||||||
|
* @return pcSignData: 签名数字信封
|
||||||
|
*/
|
||||||
|
String pcSignData = api.SYD_SignDigitalEnvelope(pcDnEN, pcDnEN, orgData2k);
|
||||||
|
System.out.println("签名数字信封:" + pcSignData);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 利用清算所公钥证书对签名数据进行验签。接收用会员的私钥证书解密数字信封,还原原文。
|
||||||
|
* 上清所 byte[] SYD_VerifyDigitalEnveloe(String pcDnDe, String pcDnVerify, String pcSignData );
|
||||||
|
* @param pcDnDe: 会员的私钥证书
|
||||||
|
* @param pcDnVerify: 清算所公钥证书
|
||||||
|
* @param pcSignData: 签名数字信封数据。
|
||||||
|
* @return pcData:原数据
|
||||||
|
*/
|
||||||
|
|
||||||
|
byte[] oData = api.SYD_VerifyDigitalEnveloe(pcDnEN, pcDnEN, pcSignData);
|
||||||
|
System.out.println("原数据:" + Util.bytes2HexString(oData));
|
||||||
|
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} finally {
|
||||||
|
long endTime = System.currentTimeMillis(); //获取结束时间
|
||||||
|
System.out.println("程序运行时间:" + (endTime - startTime) + "ms"); //输出程序运行时间
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user