首页 > 编程 > C# > 正文

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

2020-01-24 00:32:52
字体:
来源:转载
供稿:网友

本文实例讲述了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);    }  }}

运行效果:

PS:关于加密解密感兴趣的朋友还可以参考本站在线工具:

文字在线加密解密工具(包含AES、DES、RC4等):
http://tools.VeVB.COm/password/txt_encode

MD5在线加密工具:
http://tools.VeVB.COm/password/CreateMD5Password

在线散列/哈希算法加密工具:
http://tools.VeVB.COm/password/hash_encrypt

在线MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:
http://tools.VeVB.COm/password/hash_md5_sha

在线sha1/sha224/sha256/sha384/sha512加密工具:
http://tools.VeVB.COm/password/sha_encode

更多关于C#相关内容还可查看本站专题:《C#加密与解密算法与技巧总结》、《C#窗体操作技巧汇总》、《C#常见控件用法教程》、《WinForm控件用法总结》、《C#数据结构与算法教程》、《C#数组操作技巧总结》及《C#面向对象程序设计入门教程

希望本文所述对大家C#程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表