C#實現(xiàn)簡單的RSA非對稱加密算法示例
本文實例講述了C#實現(xiàn)簡單的RSA非對稱加密算法。分享給大家供大家參考,具體如下:
界面控件
namespace RSA算法
{
partial class Form1
{
/// <summary>
/// 必需的設(shè)計器變量。
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// 清理所有正在使用的資源。
/// </summary>
/// <param name="disposing">如果應(yīng)釋放托管資源,為 true;否則為 false。</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows 窗體設(shè)計器生成的代碼
/// <summary>
/// 設(shè)計器支持所需的方法 - 不要
/// 使用代碼編輯器修改此方法的內(nèi)容。
/// </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 = "執(zhí)行加密解密";
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)
{
//創(chuàng)建RSA加密算法服務(wù)提供者
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
//顯示公鑰和私鑰
PubKeyBox.Text = RSA.ToXmlString(false);
PrvKeyBox.Text = RSA.ToXmlString(true);
//執(zhí)行加密
byte[] EncrypeBytes = RSA.Encrypt(Encoding.UTF8.GetBytes(StrBox.Text), true);
EncrypeBox.Text = Encoding.UTF8.GetString(EncrypeBytes);
//執(zhí)行解密
byte[] DecrypeBytes = RSA.Decrypt(EncrypeBytes, true);
Str2Box.Text = Encoding.UTF8.GetString(DecrypeBytes);
}
}
}
運(yùn)行效果:

PS:關(guān)于加密解密感興趣的朋友還可以參考本站在線工具:
文字在線加密解密工具(包含AES、DES、RC4等):
http://tools.jb51.net/password/txt_encode
MD5在線加密工具:
http://tools.jb51.net/password/CreateMD5Password
在線散列/哈希算法加密工具:
http://tools.jb51.net/password/hash_encrypt
在線MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:
http://tools.jb51.net/password/hash_md5_sha
在線sha1/sha224/sha256/sha384/sha512加密工具:
http://tools.jb51.net/password/sha_encode
更多關(guān)于C#相關(guān)內(nèi)容還可查看本站專題:《C#加密與解密算法與技巧總結(jié)》、《C#窗體操作技巧匯總》、《C#常見控件用法教程》、《WinForm控件用法總結(jié)》、《C#數(shù)據(jù)結(jié)構(gòu)與算法教程》、《C#數(shù)組操作技巧總結(jié)》及《C#面向?qū)ο蟪绦蛟O(shè)計入門教程》
希望本文所述對大家C#程序設(shè)計有所幫助。
相關(guān)文章
C#實現(xiàn)帶消息數(shù)的App圖標(biāo)
這篇文章主要介紹了如何使用C#實現(xiàn)帶消息數(shù)的App圖標(biāo)的方法,并附上全部源碼,分享給大家,有需要的小伙伴可以參考下。2015-12-12
WinForm實現(xiàn)為TextBox設(shè)置水印文字功能
這篇文章主要介紹了WinForm實現(xiàn)為TextBox設(shè)置水印文字功能,很實用的一個技巧,需要的朋友可以參考下2014-08-08
C#實現(xiàn)按數(shù)據(jù)庫郵件列表發(fā)送郵件的方法
這篇文章主要介紹了C#實現(xiàn)按數(shù)據(jù)庫郵件列表發(fā)送郵件的方法,涉及C#讀取數(shù)據(jù)庫及通過自定義函數(shù)發(fā)送郵件的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-07-07

