lfx 1 месяц назад
Родитель
Сommit
cf25704c12
2 измененных файлов с 44 добавлено и 1 удалено
  1. 5 1
      mjava-lianan/pom.xml
  2. 39 0
      mjava-lianan/src/main/java/com/malk/lianan/RsaUtil.java

+ 5 - 1
mjava-lianan/pom.xml

@@ -45,7 +45,11 @@
             <artifactId>lombok</artifactId>
             <version>1.18.30</version>
         </dependency>
-
+        <dependency>
+            <artifactId>bcprov-jdk15on</artifactId>
+            <groupId>org.bouncycastle</groupId>
+            <version>1.70</version>
+        </dependency>
     </dependencies>
 
     <build>

+ 39 - 0
mjava-lianan/src/main/java/com/malk/lianan/RsaUtil.java

@@ -1,6 +1,45 @@
 package com.malk.lianan;
 
+import cn.hutool.core.codec.Base64;
+import org.bouncycastle.jce.provider.BouncyCastleProvider;
+
+import java.security.KeyFactory;
+import java.security.PrivateKey;
+import java.security.Signature;
+import java.security.spec.PKCS8EncodedKeySpec;
+
 public class RsaUtil {
 
+    private final static String KEY_RSA = "RSA";
+    private final static String KEY_RSA_SIGNATURE = "SHA256WithRSA";
+    private static BouncyCastleProvider bouncyCastleProvider = new BouncyCastleProvider();
+
+    public static String sign(byte[] data, String privateKey) {
+        String str = "";
+        try {
+// 解密由 base64 编码的私钥
+            byte[] bytes = decryptBase64(privateKey);
+// 构造 PKCS8EncodedKeySpec 对象
+            PKCS8EncodedKeySpec pkcs = new PKCS8EncodedKeySpec(bytes);
+// 指定的加密算法
+            KeyFactory factory = KeyFactory.getInstance(KEY_RSA,bouncyCastleProvider);
+// 取私钥对象
+            PrivateKey key = factory.generatePrivate(pkcs);
+// 用私钥对信息生成数字签名
+            Signature signature =Signature.getInstance(KEY_RSA_SIGNATURE,bouncyCastleProvider);
+            signature.initSign(key);
+            signature.update(data);
+            str = encryptBase64(signature.sign());
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return str;
+    }
+    public static byte[] decryptBase64(String key) throws Exception {
+        return Base64.decode(key);
+    }
+    public static String encryptBase64(byte[] key) throws Exception {
+        return new String(Base64.encode(key));
+    }
 
 }