非对称加密与解密
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);
}
}
}