From 726eecdbc6276312b1aed83ae7cf3b9311cc989a Mon Sep 17 00:00:00 2001 From: cheney Date: Thu, 18 Aug 2022 16:03:43 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=93=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/上清所对接JAVA接口文档.pdf | Bin 343228 -> 343181 bytes .../com/sunyard/sydapi/test/Shanqing.java | 415 +++++++++++++++++ src/test/java/sample/Sample.java | 419 ++---------------- 3 files changed, 444 insertions(+), 390 deletions(-) create mode 100644 src/test/java/com/sunyard/sydapi/test/Shanqing.java diff --git a/doc/上清所对接JAVA接口文档.pdf b/doc/上清所对接JAVA接口文档.pdf index 30e33c27d89e3f18e26afbeffa16c70693bc04ab..4bb436bb62a9c0b22d7f69cec9f985e661e25855 100644 GIT binary patch delta 3954 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 delta 4017 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 diff --git a/src/test/java/com/sunyard/sydapi/test/Shanqing.java b/src/test/java/com/sunyard/sydapi/test/Shanqing.java new file mode 100644 index 0000000..b0799a0 --- /dev/null +++ b/src/test/java/com/sunyard/sydapi/test/Shanqing.java @@ -0,0 +1,415 @@ +package com.sunyard.sydapi.test; + +import com.sunyard.RetWrap; +import com.sunyard.SydApi; +import com.sunyard.cert.X509; +import com.sunyard.proto.Util; +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import racal.sunyard.main.SydApi4j; + +import java.io.UnsupportedEncodingException; + + +/** + * 上清例子 + */ +public class Shanqing { + + SydApi4j api; + + @Before + public void before() { + // 通过设置debug的属性开启debug,如果不设置则默认不打开 + System.setProperty("com.sunyard.sydapi4j.debug", "true"); + api = (SydApi4j) new SydApi4j().connect("192.168.0.200", 8889, null, 1000); + } + + @After + public void after() { + try { + this.api.disconnect(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 流程演示 + */ + @Test + public void testProcess() { + 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")))); + } + + } + + // + // 测试通过 + // 73 + @Test + public void testSM2ConfirmSessionKeyC() { + + String userId = "8012"; + byte[] data = "12343242".getBytes(); + + // 通过用户id获取公钥 + String pk = api.SM2GetPublicKeyC(userId, SydApi.FOR_ENCRYPT); + + // 生成数字信封 + RetWrap retWrap = api.SM2GenSessionKey(pk); + printRetWrap(retWrap); + String cipherKey = (String) retWrap.get(SydApi.RET_CIPHER_KEY); + String sessionKey = (String) retWrap.get(SydApi.RET_SESSION_KEY); + String kcv = (String) retWrap.get(SydApi.RET_KCV); + + // 使用生成的对称密钥加密数据 + byte[] dataEnc = api.SYMEncryptData(SydApi.NALG_SM4, sessionKey, data); + + // 解密数字信封 + RetWrap retWrap1 = api.SM2ConfirmSessionKeyC(userId, cipherKey); + printRetWrap(retWrap1); + sessionKey = (String) retWrap1.get(SydApi.RET_SESSION_KEY); + kcv = (String) retWrap1.get(SydApi.RET_KCV); + + // 使用解密出来的对称密钥解密数据 + byte[] bytes1 = api.SYMDecryptData(SydApi.NALG_SM4, sessionKey, dataEnc); + System.out.println("解密后的数据:" + new String(bytes1)); + } + + + @Test + public void testDetachedSignAndVerify1() throws UnsupportedEncodingException { + String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"; + String orgData = "111111213323143243243"; + + + String sign = api.attachedSign(orgData.getBytes(), dn); + System.out.println("签名结果: " + sign); + System.out.println("签名结果 hex : " + Util.bytes2HexString(Util.decodeBase64(sign))); + + boolean verify = api.attachedVerify(sign); + System.out.println("验签结果: " + verify); + Assert.assertTrue(verify); + } + + + @Test + public void testDetachedSignAndVerify2() throws UnsupportedEncodingException { + String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"; + String orgData = "111111213323143243243"; + + + String sign = api.attachedSignSoft(orgData.getBytes(), dn); + System.out.println("签名结果: " + sign); + System.out.println("签名结果 hex: " + Util.bytes2HexString(Util.decodeBase64(sign))); + + boolean verify = api.attachedVerify(sign); + System.out.println("验签结果: " + verify); + Assert.assertTrue(verify); + } + + + @Test + public void testDetachedSignAndVerify3() throws UnsupportedEncodingException { + String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"; + byte[] orgData = new byte[3 * 1024]; + + String sign = api.attachedSign(orgData, dn); + System.out.println("签名结果: " + sign); + System.out.println("签名结果 hex: " + Util.bytes2HexString(Util.decodeBase64(sign))); + + boolean verify = api.attachedVerify(sign); + System.out.println("验签结果: " + verify); + Assert.assertTrue(verify); + } + + @Test + public void testDetachedSignAndVerify8() throws UnsupportedEncodingException { + String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"; + byte[] orgData = new byte[8 * 1024]; + + String sign = api.attachedSign(orgData, dn); + System.out.println("签名结果: " + sign); + System.out.println("签名结果 hex: " + Util.bytes2HexString(Util.decodeBase64(sign))); + + boolean verify = api.attachedVerify(sign); + System.out.println("验签结果: " + verify); + Assert.assertTrue(verify); + } + + // 测试通过 + // 8018 + @Test + public void testAttachedSignAndVerify() { + String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"; + String orgData = "111111213323143243243"; + String sign = api.attachedSign(orgData.getBytes(), dn); + System.out.println("签名结果: " + sign); + System.out.println("签名结果 hex : " + Util.bytes2HexString(Util.decodeBase64(sign))); + + boolean verify = api.attachedVerify(sign); + System.out.println("验签结果: " + verify); + } + + @Test + public void testAttachedSignAndVerifyGetX509() { + String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"; + byte[] orgData = "111111213323143243243".getBytes(); + String sign = api.attachedSign(orgData, dn); + System.out.println("签名结果: " + sign); + + + X509 verify = api.attachedVerifyAndGetX509(sign); + System.out.println("验签结果: " + Util.bytes2HexString(verify.getPubKey())); + } + + @Test + public void testAttachedSignAndVerifyRD() { + String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"; + String orgData = "111111213323143243243"; + String sign = api.attachedSign(orgData.getBytes(), dn); + System.out.println("签名结果: " + sign); + + byte[] verify = api.attachedVerifyRD(sign); + System.out.println("验签结果: " + Util.bytes2HexString(verify)); + } + + @Test + public void testAttachedSignAndVerifyGetAll() { + String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"; + byte[] orgData = "111111213323143243243".getBytes(); + String sign = api.attachedSign(orgData, dn); + System.out.println("签名结果: " + sign); + + RetWrap verify = api.attachedVerifyAndGetAll(sign); + if (verify != null) { + System.out.println("x509公钥: " + Util.bytes2HexString(((X509) verify.get("x509")).getPubKey())); + System.out.println("签名原数据: " + verify.get("oData")); + } + } + + @Test + public void testAttachedSignAndVerifyGetAll8k() { + String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"; + byte[] orgData = new byte[ 8 * 1024 ]; + String sign = api.attachedSign(orgData, dn); + System.out.println("签名结果: " + sign); + + RetWrap verify = api.attachedVerifyAndGetAll(sign); + if (verify != null) { + System.out.println("x509公钥: " + Util.bytes2HexString(((X509) verify.get("x509")).getPubKey())); + System.out.println("签名原数据: " + verify.get("oData")); + } + } + + + @Test + public void testAttachedSignAndVerifyGetX509C() { + String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"; + byte[] orgData = "111111213323143243243".getBytes(); + byte[] sign = api.attachedSignC(orgData, dn); + System.out.println("签名结果: " + sign); + + X509 verify = api.attachedVerifyAndGetX509(sign); + System.out.println("验签结果: " + Util.bytes2HexString(verify.getPubKey())); + } + + @Test + public void testAttachedSignAndVerifyRDC() { + String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"; + String orgData = "111111213323143243243"; + byte[] sign = api.attachedSignC(orgData.getBytes(), dn); + System.out.println("签名结果: " + sign); + + byte[] verify = api.attachedVerifyRD(sign); + System.out.println("验签结果: " + Util.bytes2HexString(verify)); + } + + @Test + public void testAttachedSignAndVerifyGetAllC() { + String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"; + byte[] orgData = "111111213323143243243".getBytes(); + byte[] sign = api.attachedSignC(orgData, dn); + System.out.println("签名结果: " + sign); + + + RetWrap verify = api.attachedVerifyAndGetAll(sign); + if (verify != null) { + System.out.println("x509公钥: " + Util.bytes2HexString(((X509) verify.get("x509")).getPubKey())); + System.out.println("签名原数据: " + verify.get("oData")); + } + } + + @Test + public void testDecryptDE54k12() throws UnsupportedEncodingException { + String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"; + byte[] oData = new byte[4 * 1024]; + + RetWrap retWrap = api.generateDEByDnHsm(dn, oData); + byte[] CipherKey = (byte[]) retWrap.get(SydApi.RET_CIPHER_KEY); + byte[] sessionKey = (byte[]) retWrap.get(SydApi.RET_SESSION_KEY); + printRetWrap(retWrap); + + RetWrap retWrap1 = api.decryptDEByDNSoft(dn, new String(CipherKey)); + printRetWrap(retWrap1); + byte[] deData = (byte[]) retWrap1.get("oData"); + Assert.assertArrayEquals(deData, oData); + } + + @Test + public void testDecryptDE54k21() throws UnsupportedEncodingException { + String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"; + byte[] oData = new byte[4 * 1024]; + + RetWrap retWrap = api.generateDEByDnSoft(dn, oData); + byte[] CipherKey = (byte[]) retWrap.get(SydApi.RET_CIPHER_KEY); + byte[] sessionKey = (byte[]) retWrap.get(SydApi.RET_SESSION_KEY); + printRetWrap(retWrap); + + RetWrap retWrap1 = api.decryptDEByDNHsm(dn, new String(CipherKey)); + printRetWrap(retWrap1); + byte[] deData = (byte[]) retWrap1.get("oData"); + Assert.assertArrayEquals(deData, oData); + } + + + @Test + public void testDecryptDE54k() throws UnsupportedEncodingException { + + String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"; + byte[] oData = new byte[4 * 1024]; + + RetWrap retWrap = api.generateDEByDn(dn, oData); + byte[] CipherKey = (byte[]) retWrap.get(SydApi.RET_CIPHER_KEY); + byte[] sessionKey = (byte[]) retWrap.get(SydApi.RET_SESSION_KEY); + printRetWrap(retWrap); + + RetWrap retWrap1 = api.decryptDEByDN(dn, CipherKey); + printRetWrap(retWrap1); + + } + + + @Test + public void testDecryptDE54kr() throws UnsupportedEncodingException { + String dn = "CN=YCCA@黄金交易所@Zhuangj@1,OU=Individual-2,OU=YCCA,O=CFCA OCA1,C=CN"; + byte[] oData = new byte[4 * 1024]; + + RetWrap retWrap = api.generateDEByDn(dn, oData); + byte[] CipherKey = (byte[]) retWrap.get(SydApi.RET_CIPHER_KEY); + byte[] sessionKey = (byte[]) retWrap.get(SydApi.RET_SESSION_KEY); + printRetWrap(retWrap); + + RetWrap retWrap1 = api.decryptDEByDN(dn, CipherKey); + printRetWrap(retWrap1); + } + + + @Test + public void testDecryptDE520M() throws UnsupportedEncodingException { + String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"; + byte[] oData = new byte[20 * 1024 * 1024]; + + RetWrap retWrap = api.generateDEByDn(dn, oData); + byte[] CipherKey = (byte[]) retWrap.get(SydApi.RET_CIPHER_KEY); + byte[] sessionKey = (byte[]) retWrap.get(SydApi.RET_SESSION_KEY); + printRetWrap(retWrap); + + RetWrap retWrap1 = api.decryptDEByDN(dn, CipherKey); + printRetWrap(retWrap1); + } + + @Test + public void testDecryptDE58k() throws UnsupportedEncodingException { + String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"; + byte[] oData = new byte[8 * 1024]; + + RetWrap retWrap = api.generateDEByDn(dn, oData); + byte[] CipherKey = (byte[]) retWrap.get(SydApi.RET_CIPHER_KEY); + byte[] sessionKey = (byte[]) retWrap.get(SydApi.RET_SESSION_KEY); + printRetWrap(retWrap); + + RetWrap retWrap1 = api.decryptDEByDN(dn, CipherKey); + printRetWrap(retWrap1); + } + + @Test + public void testDecryptDE5() throws UnsupportedEncodingException { + String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"; + byte[] oData = "00001111222233".getBytes(); + + RetWrap retWrap = api.generateDEByDn(dn, oData); + byte[] CipherKey = (byte[]) retWrap.get(SydApi.RET_CIPHER_KEY); + byte[] sessionKey = (byte[]) retWrap.get(SydApi.RET_SESSION_KEY); + printRetWrap(retWrap); + + RetWrap retWrap1 = api.decryptDEByDN(dn, CipherKey); + printRetWrap(retWrap1); + } + + + // 测试通过 + // 76 + @Test + public void testSM3Hash() { + String orgData = "FFFFFFFFFFFFFFFF"; + + byte[] hash = api.SM3Hash(orgData.getBytes()); + + System.out.println("hash:" + Util.bytes2HexString(hash)); + } + + + // =============================工具方法============================================== + + public static void printRetWrap(RetWrap rw) { + printRetWrap(rw, false); + } + + /** + * 输出 + * + * @param rw + */ + public static void printRetWrap(RetWrap rw, boolean flag) { + for (String s : rw.keySet()) { + + Object o = rw.get(s); + if (o instanceof String) { + System.out.println(s + ":" + o); + } else if (o instanceof byte[]) { + if (flag) { + System.out.println(s + ": " + Util.bytes2HexString((byte[]) o)); + } else { + System.out.println(s + ": " + new String((byte[]) o)); + } + } else { + System.out.println(s + ":" + o); + } + } + } +} diff --git a/src/test/java/sample/Sample.java b/src/test/java/sample/Sample.java index a93a34f..a25022e 100644 --- a/src/test/java/sample/Sample.java +++ b/src/test/java/sample/Sample.java @@ -4,10 +4,6 @@ import com.sunyard.RetWrap; import com.sunyard.SydApi; import com.sunyard.cert.X509; import com.sunyard.proto.Util; -import org.junit.After; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; import racal.sunyard.main.SydApi4j; import java.io.UnsupportedEncodingException; @@ -18,397 +14,40 @@ import java.io.UnsupportedEncodingException; */ public class Sample { - SydApi4j api; + public static void main(String[] args) throws UnsupportedEncodingException { - @Before - public void before() { // 通过设置debug的属性开启debug,如果不设置则默认不打开 System.setProperty("com.sunyard.sydapi4j.debug", "true"); - api = (SydApi4j) new SydApi4j().connect("172.16.18.59", 8889, null, 1000); - } + // 单台加密机 + SydApi api = new SydApi4j().connect("192.168.0.200", 8889, null, 1000); - @After - public void after() { try { - this.api.disconnect(); - } catch (Exception e) { - e.printStackTrace(); - } - } - - /** - * 流程演示 - */ - @Test - public void testProcess() { - 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")))); - } - - } - - // - // 测试通过 - // 73 - @Test - public void testSM2ConfirmSessionKeyC() { - - String userId = "8012"; - byte[] data = "12343242".getBytes(); - - // 通过用户id获取公钥 - String pk = api.SM2GetPublicKeyC(userId, SydApi.FOR_ENCRYPT); - - // 生成数字信封 - RetWrap retWrap = api.SM2GenSessionKey(pk); - printRetWrap(retWrap); - String cipherKey = (String) retWrap.get(SydApi.RET_CIPHER_KEY); - String sessionKey = (String) retWrap.get(SydApi.RET_SESSION_KEY); - String kcv = (String) retWrap.get(SydApi.RET_KCV); - - // 使用生成的对称密钥加密数据 - byte[] dataEnc = api.SYMEncryptData(SydApi.NALG_SM4, sessionKey, data); - - // 解密数字信封 - RetWrap retWrap1 = api.SM2ConfirmSessionKeyC(userId, cipherKey); - printRetWrap(retWrap1); - sessionKey = (String) retWrap1.get(SydApi.RET_SESSION_KEY); - kcv = (String) retWrap1.get(SydApi.RET_KCV); - - // 使用解密出来的对称密钥解密数据 - byte[] bytes1 = api.SYMDecryptData(SydApi.NALG_SM4, sessionKey, dataEnc); - System.out.println("解密后的数据:" + new String(bytes1)); - } - - - @Test - public void testDetachedSignAndVerify1() throws UnsupportedEncodingException { - String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"; - String orgData = "111111213323143243243"; - - - String sign = api.attachedSign(orgData.getBytes(), dn); - System.out.println("签名结果: " + sign); - System.out.println("签名结果 hex : " + Util.bytes2HexString(Util.decodeBase64(sign))); - - boolean verify = api.attachedVerify(sign); - System.out.println("验签结果: " + verify); - Assert.assertTrue(verify); - } - - - @Test - public void testDetachedSignAndVerify2() throws UnsupportedEncodingException { - String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"; - String orgData = "111111213323143243243"; - - - String sign = api.attachedSignSoft(orgData.getBytes(), dn); - System.out.println("签名结果: " + sign); - System.out.println("签名结果 hex: " + Util.bytes2HexString(Util.decodeBase64(sign))); - - boolean verify = api.attachedVerify(sign); - System.out.println("验签结果: " + verify); - Assert.assertTrue(verify); - } - - - @Test - public void testDetachedSignAndVerify3() throws UnsupportedEncodingException { - String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"; - byte[] orgData = new byte[3 * 1024]; - - String sign = api.attachedSign(orgData, dn); - System.out.println("签名结果: " + sign); - System.out.println("签名结果 hex: " + Util.bytes2HexString(Util.decodeBase64(sign))); - - boolean verify = api.attachedVerify(sign); - System.out.println("验签结果: " + verify); - Assert.assertTrue(verify); - } - - @Test - public void testDetachedSignAndVerify8() throws UnsupportedEncodingException { - String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"; - byte[] orgData = new byte[8 * 1024]; - - String sign = api.attachedSign(orgData, dn); - System.out.println("签名结果: " + sign); - System.out.println("签名结果 hex: " + Util.bytes2HexString(Util.decodeBase64(sign))); - - boolean verify = api.attachedVerify(sign); - System.out.println("验签结果: " + verify); - Assert.assertTrue(verify); - } - - // 测试通过 - // 8018 - @Test - public void testAttachedSignAndVerify() { - String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"; - String orgData = "111111213323143243243"; - String sign = api.attachedSign(orgData.getBytes(), dn); - System.out.println("签名结果: " + sign); - System.out.println("签名结果 hex : " + Util.bytes2HexString(Util.decodeBase64(sign))); - - boolean verify = api.attachedVerify(sign); - System.out.println("验签结果: " + verify); - } - - @Test - public void testAttachedSignAndVerifyGetX509() { - String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"; - byte[] orgData = "111111213323143243243".getBytes(); - String sign = api.attachedSign(orgData, dn); - System.out.println("签名结果: " + sign); - - - X509 verify = api.attachedVerifyAndGetX509(sign); - System.out.println("验签结果: " + Util.bytes2HexString(verify.getPubKey())); - } - - @Test - public void testAttachedSignAndVerifyRD() { - String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"; - String orgData = "111111213323143243243"; - String sign = api.attachedSign(orgData.getBytes(), dn); - System.out.println("签名结果: " + sign); - - byte[] verify = api.attachedVerifyRD(sign); - System.out.println("验签结果: " + Util.bytes2HexString(verify)); - } - - @Test - public void testAttachedSignAndVerifyGetAll() { - String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"; - byte[] orgData = "111111213323143243243".getBytes(); - String sign = api.attachedSign(orgData, dn); - System.out.println("签名结果: " + sign); - - RetWrap verify = api.attachedVerifyAndGetAll(sign); - if (verify != null) { - System.out.println("x509公钥: " + Util.bytes2HexString(((X509) verify.get("x509")).getPubKey())); - System.out.println("签名原数据: " + verify.get("oData")); - } - } - - @Test - public void testAttachedSignAndVerifyGetAll8k() { - String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"; - byte[] orgData = new byte[ 8 * 1024 ]; - String sign = api.attachedSign(orgData, dn); - System.out.println("签名结果: " + sign); - - RetWrap verify = api.attachedVerifyAndGetAll(sign); - if (verify != null) { - System.out.println("x509公钥: " + Util.bytes2HexString(((X509) verify.get("x509")).getPubKey())); - System.out.println("签名原数据: " + verify.get("oData")); - } - } - - - @Test - public void testAttachedSignAndVerifyGetX509C() { - String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"; - byte[] orgData = "111111213323143243243".getBytes(); - byte[] sign = api.attachedSignC(orgData, dn); - System.out.println("签名结果: " + sign); - - X509 verify = api.attachedVerifyAndGetX509(sign); - System.out.println("验签结果: " + Util.bytes2HexString(verify.getPubKey())); - } - - @Test - public void testAttachedSignAndVerifyRDC() { - String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"; - String orgData = "111111213323143243243"; - byte[] sign = api.attachedSignC(orgData.getBytes(), dn); - System.out.println("签名结果: " + sign); - - byte[] verify = api.attachedVerifyRD(sign); - System.out.println("验签结果: " + Util.bytes2HexString(verify)); - } - - @Test - public void testAttachedSignAndVerifyGetAllC() { - String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"; - byte[] orgData = "111111213323143243243".getBytes(); - byte[] sign = api.attachedSignC(orgData, dn); - System.out.println("签名结果: " + sign); - - - RetWrap verify = api.attachedVerifyAndGetAll(sign); - if (verify != null) { - System.out.println("x509公钥: " + Util.bytes2HexString(((X509) verify.get("x509")).getPubKey())); - System.out.println("签名原数据: " + verify.get("oData")); - } - } - - @Test - public void testDecryptDE54k12() throws UnsupportedEncodingException { - String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"; - byte[] oData = new byte[4 * 1024]; - - RetWrap retWrap = api.generateDEByDnHsm(dn, oData); - byte[] CipherKey = (byte[]) retWrap.get(SydApi.RET_CIPHER_KEY); - byte[] sessionKey = (byte[]) retWrap.get(SydApi.RET_SESSION_KEY); - printRetWrap(retWrap); - - RetWrap retWrap1 = api.decryptDEByDNSoft(dn, new String(CipherKey)); - printRetWrap(retWrap1); - byte[] deData = (byte[]) retWrap1.get("oData"); - Assert.assertArrayEquals(deData, oData); - } - - @Test - public void testDecryptDE54k21() throws UnsupportedEncodingException { - String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"; - byte[] oData = new byte[4 * 1024]; - - RetWrap retWrap = api.generateDEByDnSoft(dn, oData); - byte[] CipherKey = (byte[]) retWrap.get(SydApi.RET_CIPHER_KEY); - byte[] sessionKey = (byte[]) retWrap.get(SydApi.RET_SESSION_KEY); - printRetWrap(retWrap); - - RetWrap retWrap1 = api.decryptDEByDNHsm(dn, new String(CipherKey)); - printRetWrap(retWrap1); - byte[] deData = (byte[]) retWrap1.get("oData"); - Assert.assertArrayEquals(deData, oData); - } - - - @Test - public void testDecryptDE54k() throws UnsupportedEncodingException { - - String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"; - byte[] oData = new byte[4 * 1024]; - - RetWrap retWrap = api.generateDEByDn(dn, oData); - byte[] CipherKey = (byte[]) retWrap.get(SydApi.RET_CIPHER_KEY); - byte[] sessionKey = (byte[]) retWrap.get(SydApi.RET_SESSION_KEY); - printRetWrap(retWrap); - - RetWrap retWrap1 = api.decryptDEByDN(dn, CipherKey); - printRetWrap(retWrap1); - - } - - - @Test - public void testDecryptDE54kr() throws UnsupportedEncodingException { - String dn = "CN=YCCA@黄金交易所@Zhuangj@1,OU=Individual-2,OU=YCCA,O=CFCA OCA1,C=CN"; - byte[] oData = new byte[4 * 1024]; - - RetWrap retWrap = api.generateDEByDn(dn, oData); - byte[] CipherKey = (byte[]) retWrap.get(SydApi.RET_CIPHER_KEY); - byte[] sessionKey = (byte[]) retWrap.get(SydApi.RET_SESSION_KEY); - printRetWrap(retWrap); - - RetWrap retWrap1 = api.decryptDEByDN(dn, CipherKey); - printRetWrap(retWrap1); - } - - - @Test - public void testDecryptDE520M() throws UnsupportedEncodingException { - String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"; - byte[] oData = new byte[20 * 1024 * 1024]; - - RetWrap retWrap = api.generateDEByDn(dn, oData); - byte[] CipherKey = (byte[]) retWrap.get(SydApi.RET_CIPHER_KEY); - byte[] sessionKey = (byte[]) retWrap.get(SydApi.RET_SESSION_KEY); - printRetWrap(retWrap); - - RetWrap retWrap1 = api.decryptDEByDN(dn, CipherKey); - printRetWrap(retWrap1); - } - - @Test - public void testDecryptDE58k() throws UnsupportedEncodingException { - String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"; - byte[] oData = new byte[8 * 1024]; - - RetWrap retWrap = api.generateDEByDn(dn, oData); - byte[] CipherKey = (byte[]) retWrap.get(SydApi.RET_CIPHER_KEY); - byte[] sessionKey = (byte[]) retWrap.get(SydApi.RET_SESSION_KEY); - printRetWrap(retWrap); - - RetWrap retWrap1 = api.decryptDEByDN(dn, CipherKey); - printRetWrap(retWrap1); - } - - @Test - public void testDecryptDE5() throws UnsupportedEncodingException { - String dn = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"; - byte[] oData = "00001111222233".getBytes(); - - RetWrap retWrap = api.generateDEByDn(dn, oData); - byte[] CipherKey = (byte[]) retWrap.get(SydApi.RET_CIPHER_KEY); - byte[] sessionKey = (byte[]) retWrap.get(SydApi.RET_SESSION_KEY); - printRetWrap(retWrap); - - RetWrap retWrap1 = api.decryptDEByDN(dn, CipherKey); - printRetWrap(retWrap1); - } - - - // 测试通过 - // 76 - @Test - public void testSM3Hash() { - String orgData = "FFFFFFFFFFFFFFFF"; - - byte[] hash = api.SM3Hash(orgData.getBytes()); - - System.out.println("hash:" + Util.bytes2HexString(hash)); - } - - - // =============================工具方法============================================== - - public static void printRetWrap(RetWrap rw) { - printRetWrap(rw, false); - } - - /** - * 输出 - * - * @param rw - */ - public static void printRetWrap(RetWrap rw, boolean flag) { - for (String s : rw.keySet()) { - - Object o = rw.get(s); - if (o instanceof String) { - System.out.println(s + ":" + o); - } else if (o instanceof byte[]) { - if (flag) { - System.out.println(s + ": " + Util.bytes2HexString((byte[]) o)); - } else { - System.out.println(s + ": " + new String((byte[]) o)); - } - } else { - System.out.println(s + ":" + o); + 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(); } } }