好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

C#实现简单的RSA非对称加密算法示例

本文实例讲述了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非对称加密算法示例的详细内容...

  阅读:67次