diff --git a/doc/上清所对接JAVA接口文档.pdf b/doc/上清所对接JAVA接口文档.pdf index 30e33c2..4bb436b 100644 Binary files a/doc/上清所对接JAVA接口文档.pdf and b/doc/上清所对接JAVA接口文档.pdf differ 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(); } } }