From ee395aebee8071956b25a2e92993f5a77290ee3d Mon Sep 17 00:00:00 2001 From: cheney Date: Wed, 12 Oct 2022 16:31:11 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AF=81=E4=B9=A6=E5=B7=A5=E5=85=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/sunyard/util/CertUtil.java | 20 +++ src/test/java/sample/SamplePKCS1.java | 67 ++++++++++ src/test/java/sample/SamplePKCS7.java | 121 +++++++++++++++++++ 3 files changed, 208 insertions(+) create mode 100644 src/test/java/sample/SamplePKCS1.java create mode 100644 src/test/java/sample/SamplePKCS7.java diff --git a/src/main/java/com/sunyard/util/CertUtil.java b/src/main/java/com/sunyard/util/CertUtil.java index 11d47fa..a7e46a8 100644 --- a/src/main/java/com/sunyard/util/CertUtil.java +++ b/src/main/java/com/sunyard/util/CertUtil.java @@ -6,4 +6,24 @@ public class CertUtil { public static String encodeBase64(byte[] data){ return new BASE64Encoder().encode( data ); } + + /** + * 判断正式是否是国密证书 + * @param cert 证书 base64 字符 + * @return true 国密, false 非国密 + */ + public static boolean isSM2Cert(String cert){ + + } + + /** + * 判断 p7 是否是国密证书签的 + * @param pkcs7 pkcs7 + * @return true 国密, false 非国密 + */ + public static boolean isSignedBySM2Cert( String pkcs7 ){ + + } + + } diff --git a/src/test/java/sample/SamplePKCS1.java b/src/test/java/sample/SamplePKCS1.java new file mode 100644 index 0000000..c4bd659 --- /dev/null +++ b/src/test/java/sample/SamplePKCS1.java @@ -0,0 +1,67 @@ +package sample; + + +import com.sunyard.SydApi; +import com.sunyard.proto.Util; +import racal.sunyard.main.SydApi4j; + + +public class SamplePKCS1 { + + private static final String testId = "8012"; + private static final String testData = "1234567812345678"; + private static final String testCertNo = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"; + + + public static void main(String[] args) { + + // 连接加密机 + SydApi4j api = (SydApi4j) new SydApi4j().connect("192.168.0.200", 8889, null, 1000); + + + try { + + // 原始数据模式 + case1( api ); + + // 外部 hash + case2( api ); + + + } catch (Exception e) { + e.printStackTrace(); + } finally { + api.disconnect(); + } + } + + // 签名验签 1 + public static void case1(SydApi api) { + + System.out.println("\n\n----- 裸签名 -----"); + byte[] sign = api.SYD_NakedSign(testData.getBytes(), testCertNo); + System.out.println("签名结果 " + Util.bytes2HexString(sign) ); + + + boolean pass = api.SYD_NakedVerify(testData.getBytes(), sign, testCertNo); + System.out.println("验签结果 " + pass); + } + + // 签名验签 2 + public static void case2(SydApi api) { + + String pk = api.SM2GetPublicKeyC( testId ,0); + + System.out.println( pk ); + + byte[] data = api.SM3Hash( Util.hexString2Bytes(pk) ); + + byte[] sign = api.SYD_NakedSign(data, testCertNo); + System.out.println("签名结果 " + Util.bytes2HexString(sign) ); + + + boolean pass = api.SYD_NakedVerify(data, sign, testCertNo); + System.out.println("验签结果 " + pass); + } + +} diff --git a/src/test/java/sample/SamplePKCS7.java b/src/test/java/sample/SamplePKCS7.java new file mode 100644 index 0000000..e5b72e2 --- /dev/null +++ b/src/test/java/sample/SamplePKCS7.java @@ -0,0 +1,121 @@ +package sample; + + +import com.sunyard.SydApi; +import racal.sunyard.main.SydApi4j; + + +public class SamplePKCS7 { + + private static final String testData = "1015570000408702018091900000000012018-09-19T10:13:391015570000408702015970000397542018-09-1900000001123456,测试"; + private static final String testPubKey = "034200043EDA3A107B7CC35CC005C7FBF0BB4E6B43A07EE14E360603D22ECA2A600B2D0FA03055D400D1240300F54648B849D13F50B330FF14351B5645B13686820A65BB"; + private static final String testCertNo = "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"; + + public static void main(String[] args) { + + // 连接加密机 + // SydApi4j api = (SydApi4j) new SydApi4j().connect("172.16.17.162", 8889, null, 1000); + SydApi4j.SYD_Set_Parameter_HA("unkown", "192.168.0.100", 8889, 1000); + SydApi4j api = (SydApi4j) new SydApi4j(); + + try { + + // 基础接口 原始数据模式 + case1( api ); + + // 基础接口 HASH 数据模式 + case2( api ); + + // 原始数据模式专用接口 + case3( api ); + + // HASH 模式专用接口 + case4( api ); + + + } catch (Exception e) { + e.printStackTrace(); + } finally { + api.disconnect(); + } + } + + public static void case1(SydApi api) { + System.out.println("\n\n----- PKCS7 签名验签 基础接口原始数据模式 -----"); + String sign = api.detachedSign( + SydApi.DATA_ORIGIN, + testData.getBytes(), + testCertNo + ); + + System.out.println("\t签名结果: " + sign); + + boolean verify = api.detachedVerify( + SydApi.DATA_ORIGIN, + testData.getBytes(), + sign + ); + + System.out.println("\t验签结果: " + verify); + } + + public static void case2(SydApi api) { + System.out.println("\n\n----- PKCS7 签名验签 基础接口 hash 数据模式 -----"); + byte[] hash = api.SM3Hash(testPubKey, testData.getBytes()); + + String sign = api.detachedSign( + SydApi.DATA_HASH, + hash, + SamplePKCS7.testCertNo + ); + + System.out.println("\t签名结果: " + sign); + + boolean verify = api.detachedVerify( + SydApi.DATA_HASH, + hash, + sign + ); + + System.out.println("\t验签结果: " + verify); + } + + public static void case3(SydApi api) { + System.out.println("\n\n----- PKCS7 签名验签 原始数据模式 -----"); + + String sign = api.SYD_DetachedSign( + testData.getBytes(), + testCertNo + ); + + System.out.println("\t签名结果: " + sign); + + boolean verify = api.SYD_DetachedVerify( + testData.getBytes(), + sign + ); + + System.out.println("\t验签结果: " + verify); + } + + public static void case4(SydApi api) { + System.out.println("\n\n----- PKCS7 签名验签 hash 数据模式 -----"); + + String sign = api.sm3AndDetachedSign( + testData.getBytes(), + testPubKey, + SamplePKCS7.testCertNo + ); + + System.out.println("\t签名结果: " + sign); + + boolean verify = api.sm3AndDetachedVerify( + testData.getBytes(), + testPubKey, + sign + ); + + System.out.println("\t验签结果: " + verify); + } + +}