数据传输加密

1、生成一对公、私密钥(公钥用于加密,私钥用于解密)

 /// 
    /// 随机获取公钥和私钥的字符
    /// 
    /// 长度
    /// 
    public static List<string> CreateKeyPair(int strength = 1024)
    {
        RsaKeyPairGenerator r = new RsaKeyPairGenerator();
        r.Init(new KeyGenerationParameters(new SecureRandom(), strength));
        AsymmetricCipherKeyPair keys = r.GenerateKeyPair();

        TextWriter privateTextWriter = new StringWriter();
        PemWriter privatePemWriter = new PemWriter(privateTextWriter);
        privatePemWriter.WriteObject(keys.Private);
        privatePemWriter.Writer.Flush();


        TextWriter publicTextWriter = new StringWriter();
        PemWriter publicPemWriter = new PemWriter(publicTextWriter);
        publicPemWriter.WriteObject(keys.Public);
        publicPemWriter.Writer.Flush();
        List<string> revalue = new List<string>();
        revalue.Add(publicTextWriter.ToString());
        revalue.Add(privateTextWriter.ToString());
        return revalue;
    }
    /// 
    /// RSA加密 将公钥导入到RSA对象中,准备加密
    /// 
    /// 公钥
    /// 待加密的字符串
    public static string RSAEncrypt(string PublicKey, string encryptstring)
    {
        using (TextReader reader = new StringReader(PublicKey))
        {
            dynamic key = new PemReader(reader).ReadObject();
            var rsaDecrypt = new Pkcs1Encoding(new RsaEngine());

            if (key is AsymmetricKeyParameter)
            {
                key = (AsymmetricKeyParameter)key;
            }
            else if (key is AsymmetricCipherKeyPair)
            {
                key = ((AsymmetricCipherKeyPair)key).Private;
            }
            rsaDecrypt.Init(true, key);  //这里加密是true;解密是false  
            byte[] DataToEncrypt = Encoding.UTF8.GetBytes(encryptstring);
            byte[] outBytes = rsaDecrypt.ProcessBlock(DataToEncrypt, 0, DataToEncrypt.Length);//加密
            string strBase64 = Convert.ToBase64String(outBytes);
            return strBase64;
        }
    }
    /// 
    /// RSA加密 将私钥导入到RSA对象中,准备解密
    /// 
    /// 私钥
    /// 待解密的字符串
    /// 
    public static string Decrypt(string privateKey, string decryptstring)
    {
        using (TextReader reader = new StringReader(privateKey))
        {
            dynamic key = new PemReader(reader).ReadObject();
            var rsaDecrypt = new Pkcs1Encoding(new RsaEngine());
            if (key is AsymmetricKeyParameter)
            {
                key = (AsymmetricKeyParameter)key;
            }
            else if (key is AsymmetricCipherKeyPair)
            {
                key = ((AsymmetricCipherKeyPair)key).Private;
            }
            rsaDecrypt.Init(false, key);  //这里加密是true;解密是false  

            byte[] entData = Convert.FromBase64String(decryptstring);
            entData = rsaDecrypt.ProcessBlock(entData, 0, entData.Length);
            return Encoding.UTF8.GetString(entData);
        }
    }

2、页面一加载把公钥传到前端用于加密
前端加密代码:

    var rsa = new JSEncrypt();
        var pubkey = $("#pubkey").val();
        rsa.setPublicKey(pubkey);//公钥用于加密
        var stuName= rsa.encrypt(“要加密的字段”)

3、后端接收参数解密

  var privatekey = context.Session["privatekey"].ToString();//私钥用于解密
  string stuName=Decrypt(privatekey, "前段传过来的加密字段");

你可能感兴趣的:(.net,其他)