From c18ec3846c8483975de2224c1ecac9470e9b2804 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期三, 16 八月 2023 19:21:36 +0800
Subject: [PATCH] 同步代码

---
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/util/RSASignature.java |  118 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 118 insertions(+), 0 deletions(-)

diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/util/RSASignature.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/util/RSASignature.java
new file mode 100644
index 0000000..d927439
--- /dev/null
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/MallBook/util/RSASignature.java
@@ -0,0 +1,118 @@
+package com.stylefeng.guns.modular.system.util.MallBook.util;
+
+
+import com.stylefeng.guns.modular.system.util.MallBook.config.ChannelConfig;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.io.IOException;
+import java.security.KeyFactory;
+import java.security.PrivateKey;
+import java.security.PublicKey;
+import java.security.spec.PKCS8EncodedKeySpec;
+import java.security.spec.X509EncodedKeySpec;
+
+/**
+ * @author RSA签名验签类
+ */
+public class RSASignature {
+
+    public static Logger logger = LoggerFactory.getLogger(RSASignature.class);
+
+    /**
+     * 签名算法
+     */
+    public static final String SIGN_ALGORITHMS = "SHA1WithRSA";
+
+
+    /**
+     * 商户平台私钥签名
+     *
+     * @param content
+     * @return
+     */
+    public static String sign(String content) {
+        try {
+            String privateKey = ChannelConfig.merchantPrivateKey;
+            PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec(Base64.decode(privateKey));
+            KeyFactory keyf = KeyFactory.getInstance("RSA");
+            PrivateKey priKey = keyf.generatePrivate(priPKCS8);
+            java.security.Signature signature = java.security.Signature.getInstance(SIGN_ALGORITHMS);
+            signature.initSign(priKey);
+            signature.update(content.getBytes());
+            byte[] signed = signature.sign();
+            return Base64.encode(signed);
+        } catch (Exception e) {
+            logger.error("签名失败{}", e);
+        }
+        return null;
+    }
+
+
+    /**
+     * 读取证书
+     *
+     * @param filePath 证书文件路径
+     */
+    public static String loadKey(String filePath) throws Exception {
+        try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
+            String readLine;
+            StringBuilder sb = new StringBuilder();
+            while ((readLine = br.readLine()) != null) {
+                sb.append(readLine);
+            }
+            return sb.toString();
+        } catch (IOException e) {
+            throw new Exception("私钥数据读取错误");
+        } catch (NullPointerException e) {
+            throw new Exception("私钥输入流为空");
+        }
+    }
+
+
+    /**
+     * mallbook公钥验签
+     *
+     * @param content 待签名数据
+     * @param sign    签名值
+     * @return false 验签失败 true 成功
+     */
+    public static boolean validate(String content, String sign) {
+        boolean verify = false;
+        try {
+            String publicKey = ChannelConfig.mallBookPublicKey;
+            verify = RSASignature.doCheck(content, sign, publicKey, "utf-8");
+        } catch (Exception e) {
+            logger.error("验签失败:{}", e);
+        }
+        return verify;
+    }
+
+
+    /**
+     * RSA验签
+     *
+     * @param content   待签名数据
+     * @param sign      签名值
+     * @param publicKey 分配给开发商公钥
+     * @param encode    字符集编码
+     * @return 布尔值
+     */
+    public static boolean doCheck(String content, String sign, String publicKey, String encode) {
+        try {
+            KeyFactory keyFactory = KeyFactory.getInstance("RSA");
+            byte[] encodedKey = Base64.decode(publicKey);
+            PublicKey pubKey = keyFactory.generatePublic(new X509EncodedKeySpec(encodedKey));
+            java.security.Signature signature = java.security.Signature.getInstance(SIGN_ALGORITHMS);
+            signature.initVerify(pubKey);
+            signature.update(content.getBytes(encode));
+            return signature.verify(Base64.decode(sign));
+        } catch (Exception e) {
+            logger.error("验签失败{}", e);
+        }
+        return false;
+    }
+
+}
\ No newline at end of file

--
Gitblit v1.7.1