diff --git a/src/test/java/com/sunyard/sydapi/test/TestShangqingXingye.java b/src/test/java/com/sunyard/sydapi/test/TestShangqingXingye.java index b3d886b..e250b75 100644 --- a/src/test/java/com/sunyard/sydapi/test/TestShangqingXingye.java +++ b/src/test/java/com/sunyard/sydapi/test/TestShangqingXingye.java @@ -1,14 +1,14 @@ package com.sunyard.sydapi.test; import com.sunyard.RetWrap; -import com.sunyard.SydApi; import com.sunyard.proto.Util; import racal.sunyard.main.SydApi4j; import racal.sunyard.main.SydApiBuilder; public class TestShangqingXingye { - private static final String orgData = "12345678"; - private static final String pcDnEN = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"; + private static final byte[] orgDataBig = new byte[ 5 * 1024]; + 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"); @@ -24,11 +24,9 @@ public class TestShangqingXingye { * @param pcData: 明文数据。 * @return RetWrap: 数字信封 */ - RetWrap signData = api.generateDEByDn(pcDnEN, orgData.getBytes("GBK")); - // String cpkey = (String)signData.get("CipherKey"); + RetWrap signData = api.generateDEByDn(pcDnEN, orgDataBig); byte[] cpkey2 = (byte[]) signData.get("CipherKey"); - // System.out.println("加密信封:" + cpkey); - System.out.println("加密信封:" + cpkey2); + System.out.println("加密信封:" + new String(cpkey2)); /** * 接收用私钥解密数字信封,还原原文。。 @@ -36,9 +34,8 @@ public class TestShangqingXingye { * @param cpkey: 数字信封。 * @return preData: 原数据 */ - //RetWrap oDataWrap = api.decryptDEByDN (pcDnEN,cpkey.getBytes()); - RetWrap oDataWrap = api.decryptDEByDN (pcDnEN,cpkey2); - byte[] preData = (byte[]) oDataWrap.get("oData"); + RetWrap oDataWrap = api.decryptDEByDN(pcDnEN, cpkey2); + byte[] preData = (byte[]) oDataWrap.get("oData"); System.out.println("解密信封:" + Util.bytes2HexString(preData)); @@ -48,7 +45,7 @@ public class TestShangqingXingye { * @param pcDnEN: 签名者证书 DN * @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); /** @@ -57,14 +54,10 @@ public class TestShangqingXingye { * @param orgData: 待签名的原始数据 * @param sign: 签名数据。 */ - boolean result = api.detachedVerify (1,orgData.getBytes("GBK"),signsData); + boolean result = api.detachedVerify(1, orgData2k, signsData); System.out.println("验签结果:" + result); - - - - /** * 产生对称密钥,通过清算所公钥证书加密生成数字信封。 * 利用会员的私钥证书对数据进行签名 @@ -74,7 +67,7 @@ public class TestShangqingXingye { * @param pcData: 明文数据。 * @return pcSignData: 签名数字信封 */ - String pcSignData = api.SYD_SignDigitalEnvelope(pcDnEN, pcDnEN, orgData.getBytes("GBK")); + String pcSignData = api.SYD_SignDigitalEnvelope(pcDnEN, pcDnEN, orgData2k); System.out.println("签名数字信封:" + pcSignData); /** diff --git a/src/test/java/sample/Sample.java b/src/test/java/sample/Sample.java deleted file mode 100644 index a25022e..0000000 --- a/src/test/java/sample/Sample.java +++ /dev/null @@ -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(); - } - } - } -} diff --git a/src/test/java/sample/ShangqingXingye.java b/src/test/java/sample/ShangqingXingye.java new file mode 100644 index 0000000..d11ae69 --- /dev/null +++ b/src/test/java/sample/ShangqingXingye.java @@ -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"); //输出程序运行时间 + } + + } +}