diff --git a/src/main/java/com/Sample/TestDemo.java b/src/main/java/com/Sample/TestDemo.java index 4f3351c..1185bf1 100644 --- a/src/main/java/com/Sample/TestDemo.java +++ b/src/main/java/com/Sample/TestDemo.java @@ -58,6 +58,12 @@ public class TestDemo { return signVerify; } + public static String sm3hash(SydApi4j api,String pk,String orgData) { + byte[] hash = api.SM3Hash(pk, orgData.getBytes()); + System.out.println("hash计算:"+ Util.bytes2HexString(hash)); + return Util.bytes2HexString(hash); + } + public static void testAll(SydApi4j api, String certDn, String orgData) { byte[] nakedSign = api.SYD_NakedSignAll(2, orgData.getBytes(), certDn); @@ -120,6 +126,10 @@ public class TestDemo { case 8: snSignVer(api, certDn,orgData, signorenData); break; + + case 9: + sm3hash(api, certDn,orgData); + break; case 0: testAll(api, certDn, orgData); break; diff --git a/src/main/java/racal/sunyard/main/SydApi4j.java b/src/main/java/racal/sunyard/main/SydApi4j.java index 0d9b88f..491ba4f 100644 --- a/src/main/java/racal/sunyard/main/SydApi4j.java +++ b/src/main/java/racal/sunyard/main/SydApi4j.java @@ -558,7 +558,7 @@ public class SydApi4j implements SydApi { byte[] s = null; try { - sCertDN = DnUtil.verifyDn(sCertDN); + // sCertDN = DnUtil.verifyDn(sCertDN); s = sCertDN.getBytes("GBK"); } catch (UnsupportedEncodingException var16) { var16.printStackTrace(); @@ -600,7 +600,7 @@ public class SydApi4j implements SydApi { } public byte[] SYD_NakedSign_OuterHash(byte[] orgData, String sCertDN) { - sCertDN = DnUtil.verifyDn(sCertDN); + // sCertDN = DnUtil.verifyDn(sCertDN); String pk = null; try { @@ -709,7 +709,7 @@ public class SydApi4j implements SydApi { byte[] s = null; try { - sCertDN = DnUtil.verifyDn(sCertDN); + //sCertDN = DnUtil.verifyDn(sCertDN); s = sCertDN.getBytes("GBK"); } catch (UnsupportedEncodingException var18) { var18.printStackTrace(); @@ -754,7 +754,7 @@ public class SydApi4j implements SydApi { } public boolean SYD_NakedVerify_OuterHash(byte[] orgData, byte[] sign, String sCertDN) { - sCertDN = DnUtil.verifyDn(sCertDN); + // sCertDN = DnUtil.verifyDn(sCertDN); String pk = null; try { @@ -849,6 +849,7 @@ public class SydApi4j implements SydApi { public String sm3AndDetachedSign(byte[] orgData, String publicKey, String sCertDN) { byte[] hash = SM3Hash(publicKey, orgData); + System.out.println("hash为:"+Util.bytes2HexString(hash)); return detachedSign(DATA_HASH, hash, sCertDN); } @@ -970,6 +971,7 @@ public class SydApi4j implements SydApi { @Override public boolean sm3AndDetachedVerify(byte[] orgData, String publicKey, String sign) { byte[] hash = SM3Hash(publicKey, orgData); + System.out.println("验签hash为:"+Util.bytes2HexString(hash)); return detachedVerify(DATA_HASH, hash, sign); } @@ -996,7 +998,7 @@ public class SydApi4j implements SydApi { byte[] dn = new byte[256]; byte[] s = null; try { - sCertDN = verifyDn(sCertDN); + // sCertDN = verifyDn(sCertDN); s = sCertDN.getBytes("GBK"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); @@ -1357,9 +1359,9 @@ public class SydApi4j implements SydApi { public String detachedSignAll(int rFlag,byte[] orgData, String sCertDN){ try { - String cert = getCertByDn(sCertDN); - boolean sm2Cert = CertUtil.isSM2Cert(cert); - if(!sm2Cert){//RSA +// String cert = getCertByDn(sCertDN,0); +// boolean sm2Cert = CertUtil.isSM2Cert(cert); + if(rFlag<4){//RSA return detachedSignRSA(rFlag,orgData,sCertDN); }else { if (orgData.length<4096){ @@ -1367,7 +1369,9 @@ public class SydApi4j implements SydApi { }else { String pk = null; pk = this.SYD_SM2_Get_Dn_PublicKey_HA(sCertDN.getBytes("GBK"), 0); + System.out.println(pk); byte[] hash = this.SM3Hash(pk, orgData); + System.out.println("hash为:"+Util.bytes2HexString(hash)); return detachedSign(DATA_HASH,hash,sCertDN); } } diff --git a/src/test/java/sample/Shangqing.java b/src/test/java/sample/Shangqing.java index 0bd6120..bd7aa5f 100644 --- a/src/test/java/sample/Shangqing.java +++ b/src/test/java/sample/Shangqing.java @@ -20,12 +20,12 @@ public class Shangqing { private String RSA ="C=cn,O=CFCA TEST CA,OU=NCS2,OU=Enterprises,CN=041@Z402451000010@ShanDong@00000001"; - private byte[] orgData = new byte[8]; + private byte[] orgData = new byte[10]; @Before public void before() { // 通过设置debug的属性开启debug,如果不设置则默认不打开 - System.setProperty("com.sunyard.sydapi4j.debug", "true"); + System.setProperty("com.sunyard.sydapi4j.debug", "true"); // api = (SydApi4j) new SydApi4j().connect("172.16.17.161", 8889, null, 1000); api = (SydApi4j) new SydApi4j().connect("192.168.0.100", 8889, null, 1000); @@ -116,11 +116,55 @@ public class Shangqing { System.out.println(ver); +// + } + + @Test + public void test8005(){ + + System.setProperty("com.sunyard.sydapi4j.debug", "true"); + + SydApi4j api1 = (SydApi4j) new SydApi4j().connect("192.168.0.100", 8889, null, 1000); + + SydApi4j api2 = (SydApi4j) new SydApi4j().connect("172.16.17.82", 8889, null, 1000); + String dn = "CN=test0001,OU=zyhtest,O=sunyard,L=hz,ST=zj,C=CN"; + String pk = "03420004EA1077E7D7CDA76A8470D96929866B18E57F72C12850C853904B4083656F5991EAB499F2DC32BB02BF35F8748FE7A69D76C5D08E6A23D1568344F09227C47A47"; + String oData = "123456"; + String s = api2.sm3AndDetachedSign(orgData,pk, dn); + System.out.println("签名:"+s); + + boolean ver = api2.sm3AndDetachedVerify( orgData,pk ,s); + System.out.println("验签:"+ver); + // } + @Test + public void wuhan(){ + // System.setProperty("com.sunyard.sydapi4j.debug", "true"); + System.setProperty("com.sunyard.dnsort", "false"); + + String dn = "GN=enterprise,OU=SaaS,O=北京安证通信息科技股份有限公司/serialNumber=01,SN=1990480222222437600,CN=辽宁省鹏印刷有限公司@1990480222222437600"; + String data = "123456"; + + SydApi4j api = (SydApi4j) new SydApi4j().connect("172.16.17.82", 8889, null, 1000); + + String aa = "434E3DC1C9C4FECAA1C5F4D3A1CBA2D3D0CFDEB9ABCBBE40313939303438303232323232323433373630302C534E3D313939303438303232323232323433373630302C4F3DB1B1BEA9B0B2D6A4CDA8D0C5CFA2BFC6BCBCB9C9B7DDD3D0CFDEB9ABCBBE2F73657269616C4E756D6265723D30312C4F553D536161532C474E3D656E7465727072697365"; + System.out.println(new String(Util.hexString2Bytes(aa))); + + String bb = "474E3D656E74657270726973652C4F553D536161532C4F3DB1B1BEA9B0B2D6A4CDA8D0C5CFA2BFC6BCBCB9C9B7DDD3D0CFDEB9ABCBBE2F73657269616C4E756D6265723D30312C534E3D313939303438303232323232323433373630302C434E3DC1C9C4FECAA1C5F4D3A1CBA2D3D0CFDEB9ABCBBE4031393930343830323232323232343337363030"; + System.out.println(new String(Util.hexString2Bytes(bb))); + + byte[] sign = api.SYD_NakedSign( data.getBytes(), dn); + System.out.println("签名结果:"+Util.bytes2HexString(sign)); + + String s = api.detachedSign(1, data.getBytes(), dn); + System.out.println(s); + + } + } diff --git a/sunyard.properties b/sunyard.properties index 9ee8ecf..8627630 100644 --- a/sunyard.properties +++ b/sunyard.properties @@ -1,11 +1,11 @@ ip=172.16.17.161 port=8889 timeout=5000 -#证书主题 -certDn=019023EB0005 +#证书主题或sn或pk +certDn=03420004EA1077E7D7CDA76A8470D96929866B18E57F72C12850C853904B4083656F5991EAB499F2DC32BB02BF35F8748FE7A69D76C5D08E6A23D1568344F09227C47A47 #验签数据或待解密数据 signorenData=oN039sEhy7bQVqRSLFet+qe7xxTKWENtPGG/bqthWbKDtkN6BSAi0/I1PhLlSVXFh3MnhQZNH4zyn/l0Nb1D5w== #原始数据 orgData=123456 -#交易类型 1-签名 2-验签 3-加密 4-解密 5-detach签名 6-detach验签 7-sn签名 8-sn验签 0 默认(签名验签+加密解密) -type=8 +#交易类型 1-签名 2-验签 3-加密 4-解密 5-detach签名 6-detach验签 7-sn签名 8-sn验签 9-hash计算 0默认(签名验签+加密解密) +type=9