From e16302f9d475c7cc4dd18c5abf1a23cb5502e362 Mon Sep 17 00:00:00 2001
From: whyclxw <810412026@qq.com>
Date: 星期三, 28 五月 2025 14:57:56 +0800
Subject: [PATCH] 密码验证加-

---
 src/main/java/com/whyc/encryption/SM2.java |  160 +++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 141 insertions(+), 19 deletions(-)

diff --git a/src/main/java/com/whyc/encryption/SM2.java b/src/main/java/com/whyc/encryption/SM2.java
index c477e68..cbf573f 100644
--- a/src/main/java/com/whyc/encryption/SM2.java
+++ b/src/main/java/com/whyc/encryption/SM2.java
@@ -3,6 +3,7 @@
 import org.bouncycastle.crypto.params.ECDomainParameters;
 import org.bouncycastle.math.ec.ECCurve;
 import org.bouncycastle.math.ec.ECPoint;
+import org.springframework.core.io.ClassPathResource;
 
 import java.io.*;
 import java.math.BigInteger;
@@ -34,6 +35,14 @@
     private static ECCurve.Fp curve;
     private static ECPoint G;
     private boolean debug = false;
+
+    static {
+        curve = new ECCurve.Fp(p, // q
+                a, // a
+                b); // b
+        G = curve.createPoint(gx, gy);
+        ecc_bc_spec = new ECDomainParameters(curve, G, n);
+    }
 
     public boolean isDebug() {
         return debug;
@@ -382,15 +391,23 @@
      */
     public void exportPublicKey(ECPoint publicKey, String path) {
         File file = new File(path);
+        FileOutputStream fos=null;
         try {
             if (!file.exists())
                 file.createNewFile();
             byte buffer[] = publicKey.getEncoded(false);
-            FileOutputStream fos = new FileOutputStream(file);
+            fos = new FileOutputStream(file);
             fos.write(buffer);
-            fos.close();
         } catch (IOException e) {
             e.printStackTrace();
+        }finally {
+            if(fos!=null){
+                try {
+                    fos.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
         }
     }
 
@@ -402,10 +419,12 @@
      */
     public ECPoint importPublicKey(String path) {
         File file = new File(path);
+        FileInputStream fis =null;
+        ECPoint ec=null;
         try {
             if (!file.exists())
                 return null;
-            FileInputStream fis = new FileInputStream(file);
+            fis = new FileInputStream(file);
             ByteArrayOutputStream baos = new ByteArrayOutputStream();
 
             byte buffer[] = new byte[16];
@@ -413,12 +432,19 @@
             while ((size = fis.read(buffer)) != -1) {
                 baos.write(buffer, 0, size);
             }
-            fis.close();
-            return curve.decodePoint(baos.toByteArray());
+            ec=curve.decodePoint(baos.toByteArray());
         } catch (IOException e) {
             e.printStackTrace();
+        }finally {
+            if(fis!=null){
+                try {
+                    fis.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
         }
-        return null;
+        return ec;
     }
 
     /**
@@ -429,14 +455,23 @@
      */
     public void exportPrivateKey(BigInteger privateKey, String path) {
         File file = new File(path);
+        ObjectOutputStream oos =null;
         try {
             if (!file.exists())
                 file.createNewFile();
-            ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));
+            oos = new ObjectOutputStream(new FileOutputStream(file));
             oos.writeObject(privateKey);
-            oos.close();
+
         } catch (IOException e) {
             e.printStackTrace();
+        }finally {
+            if(oos!=null){
+                try {
+                    oos.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
         }
     }
 
@@ -448,20 +483,35 @@
      */
     public BigInteger importPrivateKey(String path) {
         File file = new File(path);
+        FileInputStream fis =null;
+        ObjectInputStream ois =null;
+        BigInteger res =null;
         try {
             if (!file.exists()) {
                 return null;
             }
-            FileInputStream fis = new FileInputStream(file);
-            ObjectInputStream ois = new ObjectInputStream(fis);
-            BigInteger res = (BigInteger) (ois.readObject());
-            ois.close();
-            fis.close();
-            return res;
+             fis = new FileInputStream(file);
+             ois = new ObjectInputStream(fis);
+             res = (BigInteger) (ois.readObject());
         } catch (Exception e) {
             e.printStackTrace();
+        }finally {
+            if(fis!=null){
+                try {
+                    fis.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+            if(ois!=null){
+                try {
+                    ois.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
         }
-        return null;
+        return res;
     }
 
     /**
@@ -780,9 +830,81 @@
         }
     }
 
+    /**
+     * 鑾峰彇绉侀挜
+     * @return
+     */
+    public static BigInteger getPrivateKey(){
+        ClassPathResource classPathResource = new ClassPathResource("/config/pri_key.ksm");
+        InputStream inputStream = null;
+        BigInteger res=null;
+        ObjectInputStream ois=null;
+        try {
+            inputStream = classPathResource.getInputStream();
+            ois = new ObjectInputStream(inputStream);
+            res = (BigInteger) (ois.readObject());
+        } catch (IOException | ClassNotFoundException e) {
+            e.printStackTrace();
+        }finally {
+            if(inputStream!=null){
+                try {
+                    inputStream.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+            if(ois!=null){
+                try {
+                    ois.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        return res;
+    }
+
+    /**
+     * 鑾峰彇鍏挜
+     * @return
+     */
+    public static ECPoint getPublicKey(){
+        try {
+            ClassPathResource classPathResource = new ClassPathResource("/config/pub_key.ksm");
+            InputStream inputStream = classPathResource.getInputStream();
+            ByteArrayOutputStream baos = new ByteArrayOutputStream();
+
+            byte buffer[] = new byte[16];
+            int size;
+            while ((size = inputStream.read(buffer)) != -1) {
+                baos.write(buffer, 0, size);
+            }
+            inputStream.close();
+            return curve.decodePoint(baos.toByteArray());
+        }catch (IOException e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
     public static void main(String[] args) throws UnsupportedEncodingException {
 
         SM2 sm02 = new SM2();
+        //BigInteger privateKey = sm02.importPrivateKey(ClassUtils.getDefaultClassLoader().getResource("").getPath() + "config/pri_key.ksm");
+        //ECPoint publicKey = sm02.importPublicKey(ClassUtils.getDefaultClassLoader().getResource("").getPath() + "config/pri_key.ksm");
+
+        BigInteger privateKey2 = sm02.getPrivateKey();
+        privateKey2 = privateKey2.add(new BigInteger("1"));
+        ECPoint publicKey2 = sm02.getPublicKey();
+
+        byte[] encrypt = sm02.encrypt("123456", publicKey2);
+        String decrypt = sm02.decrypt(encrypt, privateKey2);
+        System.out.println(decrypt);
+        //System.out.println(privateKey);
+        //System.out.println(publicKey);
+
+        //System.out.println(privateKey2);
+        //System.out.println(publicKey2);
 		/*
 		 BigInteger px = new BigInteger(
 		 "0AE4C779 8AA0F119 471BEE11 825BE462 02BB79E2 A5844495 E97C04FF 4DF2548A".replace(" ", ""), 16);
@@ -792,15 +914,15 @@
 		 BigInteger privateKey = new BigInteger(
 		 "128B2FA8 BD433C6C 068C8D80 3DFF7979 2A519A55 171B1B65 0C23661D 15897263".replace(" ", ""), 16);
 		 */
-        SM2KeyPair keyPair = sm02.generateKeyPair();
+        /*SM2KeyPair keyPair = sm02.generateKeyPair();
         ECPoint publicKey=keyPair.getPublicKey();
         BigInteger privateKey=keyPair.getPrivateKey();
         sm02.exportPublicKey(publicKey, "E:/publickey.pem");
         sm02.exportPrivateKey(privateKey, "E:/privatekey.pem");
 
         System.out.println("-----------------鍏挜鍔犲瘑涓庤В锟�?-----------------");
-        /*ECPoint*/ publicKey = sm02.importPublicKey("E:/publickey.pem");
-        /*BigInteger*/ privateKey = sm02.importPrivateKey("E:/privatekey.pem");
+        *//*ECPoint*//* publicKey = sm02.importPublicKey("E:/publickey.pem");
+        *//*BigInteger*//* privateKey = sm02.importPrivateKey("E:/privatekey.pem");
         byte[] data = sm02.encrypt("娴嬭瘯鍔犲瘑aaaaaaaaaaa123aabb", publicKey);
         System.out.print("瀵嗘枃:");
         SM2.printHexString(data);
@@ -826,7 +948,7 @@
         TransportEntity entity1 = aKeyExchange.keyExchange_1();
         TransportEntity entity2 = bKeyExchange.keyExchange_2(entity1);
         TransportEntity entity3 = aKeyExchange.keyExchange_3(entity2);
-        bKeyExchange.keyExchange_4(entity3);
+        bKeyExchange.keyExchange_4(entity3);*/
     }
 
     public static class Signature {

--
Gitblit v1.9.1