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