lxw
2023-08-15 160e150009b51a39fa95d9462c3798ba28d51a09
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 {