数据传输加密

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

 /// <summary>
    /// 随机获取公钥和私钥的字符
    /// </summary>
    /// <param name="strength">长度</param>
    /// <returns></returns>
    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;
    }
    /// <summary>
    /// RSA加密 将公钥导入到RSA对象中,准备加密
    /// </summary>
    /// <param name="PublicKey">公钥</param>
    /// <param name="encryptstring">待加密的字符串</param>
    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;
        }
    }
    /// <summary>
    /// RSA加密 将私钥导入到RSA对象中,准备解密
    /// </summary>
    /// <param name="privateKey">私钥</param>
    /// <param name="decryptstring">待解密的字符串</param>
    /// <returns></returns>
    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, "前段传过来的加密字段");
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值