From b37b962dd56f600bab048e6f2a035845da631e2c Mon Sep 17 00:00:00 2001 From: yihzhou <468340218@qq.com> Date: Mon, 17 Jun 2024 09:21:28 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=AA=8C=E8=AF=81=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E7=A8=8B=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- src/main/java/com/Sample/TestDemo.java | 111 ++++++++++++++++++ .../java/com/sunyard/SydApiException.java | 5 + src/main/java/com/sunyard/util/Configure.java | 18 +++ .../java/racal/sunyard/main/SydApi4j.java | 6 +- sunyard.properties | 11 ++ 6 files changed, 150 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/Sample/TestDemo.java create mode 100644 src/main/java/com/sunyard/util/Configure.java create mode 100644 sunyard.properties diff --git a/pom.xml b/pom.xml index 5dcf8f7..0b5b9ca 100644 --- a/pom.xml +++ b/pom.xml @@ -243,7 +243,7 @@ - racal.sunyard.main.Version + com.Sample.TestDemo diff --git a/src/main/java/com/Sample/TestDemo.java b/src/main/java/com/Sample/TestDemo.java new file mode 100644 index 0000000..5e517d0 --- /dev/null +++ b/src/main/java/com/Sample/TestDemo.java @@ -0,0 +1,111 @@ +package com.Sample; + +import com.sunyard.RetWrap; +import com.sunyard.proto.Util; +import com.sunyard.util.Configure; +import java.io.IOException; +import racal.sunyard.main.SydApi4j; +import racal.sunyard.main.SydApiBuilder; + +public class TestDemo { + public static String sign(SydApi4j api, String certDn, String orgData) { + byte[] nakedSign = api.SYD_NakedSignAll(2, orgData.getBytes(), certDn); + System.out.println("签名数据:"+ Util.bytes2HexString(nakedSign)); + return Util.bytes2HexString(nakedSign); + } + + public static Boolean signVer(SydApi4j api, String certDn, String orgData, String sign) { + boolean nakedVerify = api.SYD_NakedVerifyAll(2, orgData.getBytes(), Util.hexString2Bytes(sign), certDn); + System.out.println("验签结果:"+ nakedVerify); + return nakedVerify; + } + + public static String enData(SydApi4j api, String certDn, String orgData) { + RetWrap genSM2 = api.generateDEByDnAll(3, certDn, orgData.getBytes()); + byte[] cipherKey = (byte[])genSM2.get("CipherKey"); + System.out.println("加密结果:"+ new String(cipherKey)); + return new String(cipherKey); + } + + public static String deData(SydApi4j api, String certDn, String sign) { + RetWrap denSM2 = api.decryptDEByDNAll(3, certDn, sign.getBytes()); + byte[] oData = (byte[])denSM2.get("oData"); + System.out.println("解密数据:"+ new String(oData)); + return new String(oData); + } + + public static String detachSign(SydApi4j api, String certDn, String orgData) { + String sign = api.detachedSignAll(2, orgData.getBytes(), certDn); + System.out.println("detach签名结果:"+ sign); + return sign; + } + + public static Boolean detachSignVer(SydApi4j api, String orgData, String sign) { + boolean signVerify = api.detachedVerifyAll(2, orgData.getBytes(), sign); + System.out.println("detach验签:"+ signVerify); + return Boolean.valueOf(signVerify); + } + + public static void testAll(SydApi4j api, String certDn, String orgData) { + byte[] nakedSign = api.SYD_NakedSignAll(2, orgData.getBytes(), certDn); + System.out.println("签名数据:"+ Util.bytes2HexString(nakedSign)); + boolean nakedVerify = api.SYD_NakedVerifyAll(2, orgData.getBytes(), nakedSign, certDn); + System.out.println("验签结果:"+ nakedVerify); + RetWrap genSM2 = api.generateDEByDnAll(3, certDn, orgData.getBytes()); + byte[] cipherKey = (byte[])genSM2.get("CipherKey"); + System.out.println("加密结果:"+ new String(cipherKey)); + RetWrap denSM2 = api.decryptDEByDNAll(3, certDn, cipherKey); + byte[] oData = (byte[])denSM2.get("oData"); + System.out.println("解密数据:"+ new String(oData)); + String sign = api.detachedSignAll(2, orgData.getBytes(), certDn); + System.out.println("detach签名结果:"+ sign); + boolean signVerify = api.detachedVerifyAll(2, orgData.getBytes(), sign); + System.out.println("detach验签:"+ signVerify); + } + + public static void main(String[] args) throws InterruptedException { + try { + String ip = Configure.getKey("ip"); + System.out.println("ip:"+ ip); + int port = Integer.parseInt(Configure.getKey("port")); + System.out.println("port:"+ port); + int timeout = Integer.parseInt(Configure.getKey("timeout")); + System.out.println(""+ timeout); + String certDn = Configure.getKey("certDn"); + System.out.println("certDn:"+ certDn); + String signorenData = Configure.getKey("signorenData"); + System.out.println("signorenData:"+ signorenData); + String orgData = Configure.getKey("orgData"); + System.out.println("orgData:"+ orgData); + int type = Integer.parseInt(Configure.getKey("type")); + System.out.println("type:"+ type); + SydApiBuilder builder = (new SydApiBuilder()).setIp(ip).setPort(port).setTimeout(timeout); + SydApi4j api = (SydApi4j)builder.build(); + switch (type) { + case 1: + sign(api, certDn, orgData); + break; + case 2: + signVer(api, certDn, orgData, signorenData); + break; + case 3: + enData(api, certDn, orgData); + break; + case 4: + deData(api, certDn, signorenData); + break; + case 5: + detachSign(api, certDn, orgData); + break; + case 6: + detachSignVer(api, orgData, signorenData); + break; + case 0: + testAll(api, certDn, orgData); + break; + } + } catch (IOException e) { + throw new RuntimeException(e); + } + } +} diff --git a/src/main/java/com/sunyard/SydApiException.java b/src/main/java/com/sunyard/SydApiException.java index 01b0fd9..3dd897b 100644 --- a/src/main/java/com/sunyard/SydApiException.java +++ b/src/main/java/com/sunyard/SydApiException.java @@ -63,6 +63,11 @@ public class SydApiException extends RuntimeException{ break; } + case 0x7007 : { + msg = "实体白名单未添加"; + break; + } + case 32770: msg = "签名验证错误(P7) "; break; diff --git a/src/main/java/com/sunyard/util/Configure.java b/src/main/java/com/sunyard/util/Configure.java new file mode 100644 index 0000000..731e20d --- /dev/null +++ b/src/main/java/com/sunyard/util/Configure.java @@ -0,0 +1,18 @@ +package com.sunyard.util; + +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.Properties; + +public class Configure { + public static String getKey(String key) throws IOException { + Properties p = new Properties(); + InputStream in = new FileInputStream("./sunyard.properties"); + InputStreamReader sr = new InputStreamReader(in, "UTF-8"); + p.load(sr); + String value = p.getProperty(key).trim(); + return value; + } +} diff --git a/src/main/java/racal/sunyard/main/SydApi4j.java b/src/main/java/racal/sunyard/main/SydApi4j.java index ee8ad80..0d9b88f 100644 --- a/src/main/java/racal/sunyard/main/SydApi4j.java +++ b/src/main/java/racal/sunyard/main/SydApi4j.java @@ -654,13 +654,15 @@ public class SydApi4j implements SydApi { // MD5 data.put("rFlag", 'M'); } - if (rFlag == 2) { + else if (rFlag == 2) { // SHA-1 data.put("rFlag", 'S'); } - if (rFlag == 3) { + else if (rFlag == 3) { // SHA-256 data.put("rFlag", 'R'); + }else { + throw new SydApiException("不支持的摘要算法",10001); } data.put("signatureDataType$option", 1); data.put("DN", dn); diff --git a/sunyard.properties b/sunyard.properties new file mode 100644 index 0000000..b032020 --- /dev/null +++ b/sunyard.properties @@ -0,0 +1,11 @@ +ip=172.16.18.34 +port=8889 +timeout=5000 +#证书主题 +certDn=C=CN,ST=zj,L=hz,O=sunyard,CN=welkin +#验签数据或待解密数据 +signorenData=XXXX +#原始数据 +orgData=123456 +#交易类型 1-签名 2-验签 3-加密 4-解密 0 默认(签名验签+加密解密) +type=0