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