From 49ea842aa493a2ada79d6833f4ff85fc8291c0cc Mon Sep 17 00:00:00 2001
From: whycxzp <perryhsu@163.com>
Date: 星期一, 14 三月 2022 10:49:16 +0800
Subject: [PATCH] SM2的公私钥获取方式更新

---
 src/main/java/com/whyc/encryption/SM2.java |   74 +++++++++++++++++++++++++++++++++++--
 1 files changed, 70 insertions(+), 4 deletions(-)

diff --git a/src/main/java/com/whyc/encryption/SM2.java b/src/main/java/com/whyc/encryption/SM2.java
index c477e68..29c1478 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;
@@ -780,9 +789,66 @@
         }
     }
 
+    /**
+     * 鑾峰彇绉侀挜
+     * @return
+     */
+    public static BigInteger getPrivateKey(){
+        ClassPathResource classPathResource = new ClassPathResource("/config/pri_key.ksm");
+        InputStream inputStream = null;
+        try {
+            inputStream = classPathResource.getInputStream();
+            ObjectInputStream ois = new ObjectInputStream(inputStream);
+            BigInteger res = (BigInteger) (ois.readObject());
+            ois.close();
+            return res;
+        } catch (IOException | ClassNotFoundException e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    /**
+     * 鑾峰彇鍏挜
+     * @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 +858,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 +892,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