示例#1
0
        public static String Encrypt(byte[] publicKey, byte[] data)
        {
            if (null == publicKey || publicKey.Length == 0)
            {
                return(null);
            }
            if (data == null || data.Length == 0)
            {
                return(null);
            }

            byte[] source = new byte[data.Length];
            Array.Copy(data, 0, source, 0, data.Length);

            SM2Cipher cipher             = new SM2Cipher();
            SM2CryptoServiceProvider sm2 = SM2CryptoServiceProvider.Instance;

            ECPoint userKey = sm2.ecc_curve.DecodePoint(publicKey);

            ECPoint c1 = cipher.Init_enc(sm2, userKey);

            cipher.Encrypt(source);

            byte[] c3 = new byte[32];
            cipher.Dofinal(c3);

            String sc1 = Encoding.UTF8.GetString(Hex.Encode(c1.GetEncoded()));
            String sc2 = Encoding.UTF8.GetString(Hex.Encode(source));
            String sc3 = Encoding.UTF8.GetString(Hex.Encode(c3));

            return((sc1 + sc2 + sc3).ToUpper());
        }
示例#2
0
        public static byte[] Decrypt(byte[] privateKey, byte[] encryptedData)
        {
            if (null == privateKey || privateKey.Length == 0)
            {
                return(null);
            }
            if (encryptedData == null || encryptedData.Length == 0)
            {
                return(null);
            }

            String data = Encoding.UTF8.GetString(Hex.Encode(encryptedData));

            byte[] c1Bytes = Hex.Decode(Encoding.UTF8.GetBytes(data.Substring(0, 130)));
            int    c2Len   = encryptedData.Length - 97;

            byte[] c2 = Hex.Decode(Encoding.UTF8.GetBytes(data.Substring(130, 2 * c2Len)));
            byte[] c3 = Hex.Decode(Encoding.UTF8.GetBytes(data.Substring(130 + 2 * c2Len, 64)));

            SM2CryptoServiceProvider sm2 = SM2CryptoServiceProvider.Instance;
            BigInteger userD             = new BigInteger(1, privateKey);

            ECPoint   c1     = sm2.ecc_curve.DecodePoint(c1Bytes);
            SM2Cipher cipher = new SM2Cipher();

            cipher.Init_dec(userD, c1);
            cipher.Decrypt(c2);
            cipher.Dofinal(c3);

            return(c2);
        }
示例#3
0
        public static void GenerateKeyPair()
        {
            SM2CryptoServiceProvider sm2    = SM2CryptoServiceProvider.Instance;
            AsymmetricCipherKeyPair  key    = sm2.ecc_key_pair_generator.GenerateKeyPair();
            ECPrivateKeyParameters   ecpriv = (ECPrivateKeyParameters)key.Private;
            ECPublicKeyParameters    ecpub  = (ECPublicKeyParameters)key.Public;
            BigInteger privateKey           = ecpriv.D;
            ECPoint    publicKey            = ecpub.Q;

            System.Console.Out.WriteLine("公钥: " + Encoding.UTF8.GetString(Hex.Encode(publicKey.GetEncoded())).ToUpper());
            System.Console.Out.WriteLine("私钥: " + Encoding.UTF8.GetString(Hex.Encode(privateKey.ToByteArray())).ToUpper());
        }
示例#4
0
        public static Dictionary <string, string> GetKeyPair()
        {
            SM2CryptoServiceProvider sm2    = SM2CryptoServiceProvider.Instance;
            AsymmetricCipherKeyPair  key    = sm2.ecc_key_pair_generator.GenerateKeyPair();
            ECPrivateKeyParameters   ecpriv = (ECPrivateKeyParameters)key.Private;
            ECPublicKeyParameters    ecpub  = (ECPublicKeyParameters)key.Public;
            BigInteger privateKey           = ecpriv.D;
            ECPoint    publicKey            = ecpub.Q;

            var result = new Dictionary <string, string>();

            result.Add("公钥", Encoding.UTF8.GetString(Hex.Encode(publicKey.GetEncoded())).ToUpper());
            result.Add("私钥", Encoding.UTF8.GetString(Hex.Encode(privateKey.ToByteArray())).ToUpper());
            return(result);
        }
示例#5
0
        public virtual ECPoint Init_enc(SM2CryptoServiceProvider sm2, ECPoint userKey)
        {
            BigInteger k  = null;
            ECPoint    c1 = null;


            AsymmetricCipherKeyPair key    = sm2.ecc_key_pair_generator.GenerateKeyPair();
            ECPrivateKeyParameters  ecpriv = (ECPrivateKeyParameters)key.Private;
            ECPublicKeyParameters   ecpub  = (ECPublicKeyParameters)key.Public;

            k  = ecpriv.D;
            c1 = ecpub.Q;


            p2 = userKey.Multiply(k);
            Reset();


            return(c1);
        }