本文实例讲述了C#实现简单的RSA非对称加密算法。分享给大家供大家参考,具体如下:
界面控件
namespace RSA算法
{
partial class Form1
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.IContainer components = null ;
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
/// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
protected override void Dispose( bool disposing)
{
if (disposing && (components != null ))
{
components.Dispose();
}
base .Dispose(disposing);
}
#region Windows 窗体设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要
/// 使用代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this .StrBox = new System.Windows.Forms.TextBox();
this .label1 = new System.Windows.Forms.Label();
this .PubKeyBox = new System.Windows.Forms.TextBox();
this .label2 = new System.Windows.Forms.Label();
this .PrvKeyBox = new System.Windows.Forms.TextBox();
this .label3 = new System.Windows.Forms.Label();
this .EncrypeBox = new System.Windows.Forms.TextBox();
this .label4 = new System.Windows.Forms.Label();
this .label5 = new System.Windows.Forms.Label();
this .Str2Box = new System.Windows.Forms.TextBox();
this .CrypeBtn = new System.Windows.Forms.Button();
this .SuspendLayout();
//
// StrBox
//
this .StrBox.Location = new System.Drawing.Point(115, 12);
this .StrBox.Name = "StrBox" ;
this .StrBox.Size = new System.Drawing.Size(258, 21);
this .StrBox.TabIndex = 0;
//
// label1
//
this .label1.AutoSize = true ;
this .label1.Location = new System.Drawing.Point(11, 18);
this .label1.Name = "label1" ;
this .label1.Size = new System.Drawing.Size(77, 12);
this .label1.TabIndex = 1;
this .label1.Text = "加密前的明文" ;
//
// PubKeyBox
//
this .PubKeyBox.Location = new System.Drawing.Point(115, 78);
this .PubKeyBox.Multiline = true ;
this .PubKeyBox.Name = "PubKeyBox" ;
this .PubKeyBox.Size = new System.Drawing.Size(258, 74);
this .PubKeyBox.TabIndex = 2;
//
// label2
//
this .label2.AutoSize = true ;
this .label2.Location = new System.Drawing.Point(11, 87);
this .label2.Name = "label2" ;
this .label2.Size = new System.Drawing.Size(29, 12);
this .label2.TabIndex = 3;
this .label2.Text = "公钥" ;
//
// PrvKeyBox
//
this .PrvKeyBox.Location = new System.Drawing.Point(115, 158);
this .PrvKeyBox.Multiline = true ;
this .PrvKeyBox.Name = "PrvKeyBox" ;
this .PrvKeyBox.Size = new System.Drawing.Size(258, 128);
this .PrvKeyBox.TabIndex = 4;
//
// label3
//
this .label3.AutoSize = true ;
this .label3.Location = new System.Drawing.Point(13, 167);
this .label3.Name = "label3" ;
this .label3.Size = new System.Drawing.Size(101, 12);
this .label3.TabIndex = 5;
this .label3.Text = "密钥(包含私钥)" ;
//
// EncrypeBox
//
this .EncrypeBox.Location = new System.Drawing.Point(115, 292);
this .EncrypeBox.Name = "EncrypeBox" ;
this .EncrypeBox.Size = new System.Drawing.Size(258, 21);
this .EncrypeBox.TabIndex = 6;
//
// label4
//
this .label4.AutoSize = true ;
this .label4.Location = new System.Drawing.Point(14, 299);
this .label4.Name = "label4" ;
this .label4.Size = new System.Drawing.Size(29, 12);
this .label4.TabIndex = 7;
this .label4.Text = "密文" ;
//
// label5
//
this .label5.AutoSize = true ;
this .label5.Location = new System.Drawing.Point(14, 329);
this .label5.Name = "label5" ;
this .label5.Size = new System.Drawing.Size(77, 12);
this .label5.TabIndex = 8;
this .label5.Text = "解密后的明文" ;
//
// Str2Box
//
this .Str2Box.Location = new System.Drawing.Point(115, 320);
this .Str2Box.Name = "Str2Box" ;
this .Str2Box.Size = new System.Drawing.Size(258, 21);
this .Str2Box.TabIndex = 9;
//
// CrypeBtn
//
this .CrypeBtn.Location = new System.Drawing.Point(117, 43);
this .CrypeBtn.Name = "CrypeBtn" ;
this .CrypeBtn.Size = new System.Drawing.Size(104, 23);
this .CrypeBtn.TabIndex = 10;
this .CrypeBtn.Text = "执行加密解密" ;
this .CrypeBtn.UseVisualStyleBackColor = true ;
this .CrypeBtn.Click += new System.EventHandler( this .CrypeBtn_Click);
//
// Form1
//
this .AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this .AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this .ClientSize = new System.Drawing.Size(385, 353);
this .Controls.Add( this .CrypeBtn);
this .Controls.Add( this .Str2Box);
this .Controls.Add( this .label5);
this .Controls.Add( this .label4);
this .Controls.Add( this .EncrypeBox);
this .Controls.Add( this .label3);
this .Controls.Add( this .PrvKeyBox);
this .Controls.Add( this .label2);
this .Controls.Add( this .PubKeyBox);
this .Controls.Add( this .label1);
this .Controls.Add( this .StrBox);
this .Name = "Form1" ;
this .Text = "RSA非对称加密解密" ;
this .ResumeLayout( false );
this .PerformLayout();
}
#endregion
private System.Windows.Forms.TextBox StrBox;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.TextBox PubKeyBox;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.TextBox PrvKeyBox;
private System.Windows.Forms.Label label3;
private System.Windows.Forms.TextBox EncrypeBox;
private System.Windows.Forms.Label label4;
private System.Windows.Forms.Label label5;
private System.Windows.Forms.TextBox Str2Box;
private System.Windows.Forms.Button CrypeBtn;
}
}
RSA代码
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 RSA算法
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void CrypeBtn_Click( object sender, EventArgs e)
{
//创建RSA加密算法服务提供者
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
//显示公钥和私钥
PubKeyBox.Text = RSA.ToXmlString( false );
PrvKeyBox.Text = RSA.ToXmlString( true );
//执行加密
byte [] EncrypeBytes = RSA.Encrypt(Encoding.UTF8.GetBytes(StrBox.Text), true );
EncrypeBox.Text = Encoding.UTF8.GetString(EncrypeBytes);
//执行解密
byte [] DecrypeBytes = RSA.Decrypt(EncrypeBytes, true );
Str2Box.Text = Encoding.UTF8.GetString(DecrypeBytes);
}
}
}
运行效果:
希望本文所述对大家C#程序设计有所帮助。
原文链接:http://blog.csdn.net/microzone/article/details/16904685
dy("nrwz");
查看更多关于C#实现简单的RSA非对称加密算法示例的详细内容...