From f232d52357658e0b1a7689c2cdf0e7105b9e1d5e Mon Sep 17 00:00:00 2001
From: vince <757871790@qq.com>
Date: 星期四, 28 三月 2024 16:54:36 +0800
Subject: [PATCH] 初始提交

---
 pms-core/src/main/java/com/fzzy/utils/RsaUtils.java |  231 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 231 insertions(+), 0 deletions(-)

diff --git a/pms-core/src/main/java/com/fzzy/utils/RsaUtils.java b/pms-core/src/main/java/com/fzzy/utils/RsaUtils.java
new file mode 100644
index 0000000..7246c64
--- /dev/null
+++ b/pms-core/src/main/java/com/fzzy/utils/RsaUtils.java
@@ -0,0 +1,231 @@
+package com.fzzy.utils;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.apache.commons.codec.binary.Base64;
+
+import javax.crypto.Cipher;
+import java.security.*;
+import java.security.spec.InvalidKeySpecException;
+import java.security.spec.PKCS8EncodedKeySpec;
+import java.security.spec.X509EncodedKeySpec;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 闈炲绉板姞瀵� RSA
+ */
+public class RsaUtils {
+
+    private static final String ALGORITHM = "RSA";
+
+    private static final String SIGNATURE_ALGORITHM = "MD5withRSA";
+    /**
+     * 鍏挜锛歁IGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCD+0EDvobeBBOp5P0ax8jjEWdyNjHhGLviKMNrqAdAZfYMJdq0bv2LTzijBB/7bQcjdeN+HFyNKXOsTeCgnHUaGPs++B5lLgc3PqxfP4QlhYpHebDnWfJ4WIy49nzGNGwaUETx0bYHxPWpIZCzAVoPa0rVISb9L6JX2p3SmRe4/QIDAQAB
+     * 绉侀挜锛歁IICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAIP7QQO+ht4EE6nk/RrHyOMRZ3I2MeEYu+Iow2uoB0Bl9gwl2rRu/YtPOKMEH/ttByN1434cXI0pc6xN4KCcdRoY+z74HmUuBzc+rF8/hCWFikd5sOdZ8nhYjLj2fMY0bBpQRPHRtgfE9akhkLMBWg9rStUhJv0volfandKZF7j9AgMBAAECgYAwU4bJ1TDTCJEeq39WGANhyZSkSF3ZO1JIjH6J4/vLw8nlRtMfMGjcYsStRCxlxtVPUbJcEgx9j8kQNW/jv4ZM4mh71kut9WUa1EVdbJyUKgWUl2b5ENAmeKs9VvDwLZ1WDneEeUBa4qWvgwWt8a4DrbXHG91HNmCYD3pAJL9xrQJBALsv6JC5nURFurKMSaMwhMB72OfrhIX5CMJtYYlDWn5kpdB1I6aeXzXcUZc0InYi5Tnd1Z3Kbla8PkPOJ0sFZYcCQQC0f/cpjnKJS4npDV2GHak2X+WaZ/Yc2xfSnPJKxjyw94126JO7QvgUBt+7NVP9CGc00DZh6cpz+0roEOh0Ns5bAkEAsem9MCFbmtJzutSgAN1Sr+iGpxgxI20pqDJybBZ6YnujJljQA8OvVvALFJ3Wy1YrbS6tpIYNDZ9pxuSgcCu27QJAKVLSpzTxi/U7UZu5uaa4wrYZvsvmUJzoS1ObNPtFkc5bGMoOaGTgntUkC5wd6mQuHK0+hhQcQYlakN6uGU0i2QJAXYWeqxU62GBqq+T5KrbYQWUcMFAOmB2fjebJdbZMn3mHcJoxKmSgZeucQV/n3AB9r5Q8zegY3AsMkQAWy9odew==
+     */
+    public static final String priKey = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAIP7QQO+ht4EE6nk/RrHyOMRZ3I2MeEYu+Iow2uoB0Bl9gwl2rRu/YtPOKMEH/ttByN1434cXI0pc6xN4KCcdRoY+z74HmUuBzc+rF8/hCWFikd5sOdZ8nhYjLj2fMY0bBpQRPHRtgfE9akhkLMBWg9rStUhJv0volfandKZF7j9AgMBAAECgYAwU4bJ1TDTCJEeq39WGANhyZSkSF3ZO1JIjH6J4/vLw8nlRtMfMGjcYsStRCxlxtVPUbJcEgx9j8kQNW/jv4ZM4mh71kut9WUa1EVdbJyUKgWUl2b5ENAmeKs9VvDwLZ1WDneEeUBa4qWvgwWt8a4DrbXHG91HNmCYD3pAJL9xrQJBALsv6JC5nURFurKMSaMwhMB72OfrhIX5CMJtYYlDWn5kpdB1I6aeXzXcUZc0InYi5Tnd1Z3Kbla8PkPOJ0sFZYcCQQC0f/cpjnKJS4npDV2GHak2X+WaZ/Yc2xfSnPJKxjyw94126JO7QvgUBt+7NVP9CGc00DZh6cpz+0roEOh0Ns5bAkEAsem9MCFbmtJzutSgAN1Sr+iGpxgxI20pqDJybBZ6YnujJljQA8OvVvALFJ3Wy1YrbS6tpIYNDZ9pxuSgcCu27QJAKVLSpzTxi/U7UZu5uaa4wrYZvsvmUJzoS1ObNPtFkc5bGMoOaGTgntUkC5wd6mQuHK0+hhQcQYlakN6uGU0i2QJAXYWeqxU62GBqq+T5KrbYQWUcMFAOmB2fjebJdbZMn3mHcJoxKmSgZeucQV/n3AB9r5Q8zegY3AsMkQAWy9odew==";
+    public static final String pubKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCD+0EDvobeBBOp5P0ax8jjEWdyNjHhGLviKMNrqAdAZfYMJdq0bv2LTzijBB/7bQcjdeN+HFyNKXOsTeCgnHUaGPs++B5lLgc3PqxfP4QlhYpHebDnWfJ4WIy49nzGNGwaUETx0bYHxPWpIZCzAVoPa0rVISb9L6JX2p3SmRe4/QIDAQAB";
+
+    public static InnerKey generateKey() throws NoSuchAlgorithmException {
+        return generateKey(1024);
+    }
+
+    /**
+     * 鍒濆鍖栧瘑閽�
+     * <p>
+     * 宸ヤ綔妯″紡 ECB
+     * 濉厖鏂瑰紡 NoPadding PKCS1Padding ...
+     *
+     * @param keysize 榛樿1024锛涜寖鍥村湪 [512~65536] ,涓旈渶瑕佷负 64 鐨勫�嶆暟
+     * @return
+     * @throws NoSuchAlgorithmException
+     */
+    public static InnerKey generateKey(int keysize) throws NoSuchAlgorithmException {
+        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(ALGORITHM);
+        keyPairGenerator.initialize(keysize);
+        KeyPair keyPair = keyPairGenerator.generateKeyPair();
+        //RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic();
+        //RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate();
+        return InnerKey.builder()
+                .publicKey(keyPair.getPublic().getEncoded())
+                .privateKey(keyPair.getPrivate().getEncoded())
+                .build();
+    }
+
+    private static PublicKey getPublicKey(byte[] key) throws NoSuchAlgorithmException, InvalidKeySpecException {
+        X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(key);
+        PublicKey publicKey = KeyFactory.getInstance(ALGORITHM).generatePublic(x509EncodedKeySpec);
+        return publicKey;
+    }
+
+    private static PrivateKey getPrivateKey(byte[] key) throws NoSuchAlgorithmException, InvalidKeySpecException {
+        PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(key);
+        PrivateKey privateKey = KeyFactory.getInstance(ALGORITHM).generatePrivate(pkcs8EncodedKeySpec);
+        return privateKey;
+    }
+
+    /**
+     * 绉侀挜鍔犲瘑 鍏挜瑙e瘑---鍔犲瘑
+     *
+     * @param privateKey
+     * @param data
+     * @return
+     * @throws Exception
+     */
+    public static byte[] encryptByPrivateKey(byte[] privateKey, byte[] data) throws Exception {
+        return encrypt(true, privateKey, data);
+    }
+
+    /**
+     * 绉侀挜鍔犲瘑 鍏挜瑙e瘑---瑙e瘑
+     *
+     * @param publicKey
+     * @param data
+     * @return
+     * @throws Exception
+     */
+    public static byte[] decryptByPublicKey(byte[] publicKey, byte[] data) throws Exception {
+        return decrypt(false, publicKey, data);
+    }
+
+    /**
+     * 鍏挜鍔犲瘑 绉侀挜瑙e瘑---鍔犲瘑
+     *
+     * @param publicKey
+     * @param data
+     * @return
+     * @throws Exception
+     */
+    public static byte[] encryptByPublicKey(byte[] publicKey, byte[] data) throws Exception {
+        return encrypt(false, publicKey, data);
+    }
+
+    /**
+     * 鍏挜鍔犲瘑 绉侀挜瑙e瘑---瑙e瘑
+     *
+     * @param privateKey
+     * @param data
+     * @return
+     * @throws Exception
+     */
+    public static byte[] decryptByPrivateKey(byte[] privateKey, byte[] data) throws Exception {
+        return decrypt(true, privateKey, data);
+    }
+
+    private static byte[] encrypt(boolean isPrivate, byte[] key, byte[] data) throws Exception {
+        Key thisKey = isPrivate ? getPrivateKey(key) : getPublicKey(key);
+        Cipher cipher = Cipher.getInstance(ALGORITHM);
+        cipher.init(Cipher.ENCRYPT_MODE, thisKey);
+        return cipher.doFinal(data);
+    }
+
+    private static byte[] decrypt(boolean isPrivate, byte[] key, byte[] data) throws Exception {
+        Key thisKey = isPrivate ? getPrivateKey(key) : getPublicKey(key);
+        Cipher cipher = Cipher.getInstance(ALGORITHM);
+        cipher.init(Cipher.DECRYPT_MODE, thisKey);
+        return cipher.doFinal(data);
+    }
+
+    /**
+     * 鐢ㄧ閽ュ淇℃伅鐢熸垚鏁板瓧绛惧悕
+     *
+     * @param privateKey
+     * @param data
+     * @return
+     * @throws Exception
+     */
+    public static byte[] sign(byte[] privateKey, byte[] data) throws Exception {
+        //
+        Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);
+        signature.initSign(getPrivateKey(privateKey));
+        signature.update(data);
+        return signature.sign();
+    }
+
+    /**
+     * 楠岃瘉绛惧悕
+     *
+     * @param publicKey
+     * @param data
+     * @param sign
+     * @return
+     * @throws Exception
+     */
+    public static boolean verifySign(byte[] publicKey, byte[] data, byte[] sign) throws Exception {
+        Signature signature = Signature.getInstance(SIGNATURE_ALGORITHM);
+        signature.initVerify(getPublicKey(publicKey));
+        signature.update(data);
+        return signature.verify(sign);
+    }
+
+    @Data
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @Builder
+    public static class InnerKey {
+        private byte[] publicKey;
+        private byte[] privateKey;
+    }
+
+
+    public static void main(String[] args) throws Exception {
+        InnerKey innerKey = RsaUtils.generateKey();
+        System.out.println("鍏挜锛�" + Base64.encodeBase64String(innerKey.getPublicKey()));
+        System.out.println("绉侀挜锛�" + Base64.encodeBase64String(innerKey.getPrivateKey()));
+
+//        byte[] data = "浣犲ソ锛屼笘鐣�".getBytes();
+//        testEncrypt1(innerKey.getPublicKey(), innerKey.getPrivateKey(), data);
+//        testEncrypt2(innerKey.getPublicKey(), innerKey.getPrivateKey(), data);
+//        testSign(innerKey.getPublicKey(), innerKey.getPrivateKey(), data);
+//        String enStr = SystemUtil.getSystemInfoE();
+//        System.out.println("鏈満KEY锛�"+enStr);
+        //鏇存崲杩欎釜key
+        String enStr = "XzuxnAmiOFrUXUmBgRNtFChyNHxuXm6EJB1puNfM0IdECae9HOWSarTLZJg5ase0kbtjjv2QhlPOCaNe4NG33/fCvmLiErAIxIdLSPiOmeBu+8mD3J9CRAM4SYqLsQghXji1AFI6JPzE1uF+TTbP1c+R/kJ2uj02chTorWCDVAs=";
+
+        String deStr = new String(decryptByPrivateKey(Base64.decodeBase64(priKey), Base64.decodeBase64(enStr)));
+        System.out.println("瑙e瘑锛�" + deStr);
+        //缁勮鎺堟潈瀛楃涓�
+        JSONObject jsonObject = JSON.parseObject(deStr);
+        Map<String, String> param = new HashMap<>();
+        param.put("cpuSerial", jsonObject.getString("cpuSerial"));
+        param.put("mainBoardSerial", jsonObject.getString("mainBoardSerial"));
+        param.put("limitTime", "2124-12-15 23:59:59");
+        String authStr = Base64.encodeBase64String(encryptByPrivateKey(Base64.decodeBase64(RsaUtils.priKey), JSON.toJSONString(param).getBytes()));
+        System.out.println("鎺堟潈瀵嗘枃锛�" + authStr);
+        System.out.println("娴嬭瘯瀹㈡埛绔В瀵嗭細" + new String(RsaUtils.decryptByPublicKey(Base64.decodeBase64(RsaUtils.pubKey), Base64.decodeBase64(authStr))));
+
+
+    }
+
+    private static void testEncrypt1(byte[] publicKey, byte[] privateKey, byte[] data) throws Exception {
+        // 绉侀挜鍔犲瘑 鍏挜瑙e瘑---鍔犲瘑
+        byte[] encryptBytes = RsaUtils.encryptByPrivateKey(privateKey, data);
+        System.out.println("绉侀挜鍔犲瘑鍏挜瑙e瘑-瀵嗘枃锛�" + Base64.encodeBase64String(encryptBytes));
+        // 绉侀挜鍔犲瘑 鍏挜瑙e瘑---瑙e瘑
+        byte[] result = RsaUtils.decryptByPublicKey(publicKey, encryptBytes);
+        System.out.println("瑙e瘑鍚庯細" + new String(result));
+    }
+
+    private static void testEncrypt2(byte[] publicKey, byte[] privateKey, byte[] data) throws Exception {
+        // 鍏挜鍔犲瘑 绉侀挜瑙e瘑---鍔犲瘑
+        byte[] encryptBytes = RsaUtils.encryptByPublicKey(publicKey, data);
+        System.out.println("鍏挜鍔犲瘑绉侀挜瑙e瘑-瀵嗘枃锛�" + Base64.encodeBase64String(encryptBytes));
+        // 鍏挜鍔犲瘑 绉侀挜瑙e瘑---瑙e瘑
+        byte[] result = RsaUtils.decryptByPrivateKey(privateKey, encryptBytes);
+        System.out.println("瑙e瘑鍚庯細" + new String(result));
+    }
+
+    private static void testSign(byte[] publicKey, byte[] privateKey, byte[] data) throws Exception {
+        byte[] sign = RsaUtils.sign(privateKey, data);
+        System.out.println("绛惧悕锛�" + Base64.encodeBase64String(sign));
+        boolean result = RsaUtils.verifySign(publicKey, data, sign);
+        System.out.println("楠岀缁撴灉锛�" + result);
+    }
+
+
+}

--
Gitblit v1.9.3