非对称加密与解密

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.Security.Cryptography;

namespace 加密与解密
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        //根据工具类生成 公钥 和 私钥
        //服务器保留公钥 并且 使用公钥对 文字 加密
        //用户使用私钥 对 文字 解密
        private void Form1_Load(object sender, EventArgs e)
        {

        }

        // 生成
        private void btnGenerate_Click(object sender, EventArgs e)
        {
            RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
            //生成公钥
            string strPublicKey = provider.ToXmlString(false);
            this.tbPublicKey.Text = strPublicKey;

            //生成私钥
            string strPrivateKey = provider.ToXmlString(true);
            this.tbPrivateKey.Text = strPrivateKey;


        }

        string value;

        //加密
        byte[] bytesPrivateValue;
        private void btnAddAndMinute_Click(object sender, EventArgs e)
        {
            RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
            //使用密钥来初始化provider
            provider.FromXmlString(this.tbPrivateKey.Text);

            string str= "qq";
            UTF8Encoding encoding = new UTF8Encoding();
            byte[] bytesWillEncoding = encoding.GetBytes(str);

            //加密处理返回一个字节数组
            bytesPrivateValue = provider.Encrypt(bytesWillEncoding, false);

            value = encoding.GetString(bytesPrivateValue);
            this.tbPrivateValue.Text = value;
           
        }

        //解密
        private void button1_Click(object sender, EventArgs e)
        {
             RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
            provider.FromXmlString(this.tbPrivateKey.Text);

            //注意这里的要解密的字节数据必须与 加密的那个是 同一个对象 才不会报错
            bytesPrivateValue = provider.Decrypt(bytesPrivateValue, false);

            this.tbPublicValue.Text = new UTF8Encoding().GetString(bytesPrivateValue);
        }
    }
}

posted @ 2013-03-04 23:06  feidaochuanqing  阅读(200)  评论(0编辑  收藏  举报