首 页 | 新 闻 | 技术中心 | 第二书店 | 《程序员》 | 《开发高手》 | 社 区 | 黄 页 | 人 才
移 动专 题SUNIBM微 软微 创精 华Donews人 邮
我的技术中心 
我的分类 我的文档
全部文章 发表文章
专栏管理 使用说明



 RSS 订阅 
最新文档列表
Windows/.NET
.NET  (rss)    
Visual C++  (rss)    
Delphi  (rss)    
Visual Basic  (rss)    
ASP  (rss)    
JavaScript  (rss)    
Java/Linux
Java  (rss)    
Perl  (rss)    
综合
其他开发语言  (rss)    
文件格式  (rss)    
企业开发
游戏开发  (rss)    
网站制作技术  (rss)    
数据库
数据库开发  (rss)    
软件工程
其他  (rss)    

积极原创作者 
TechnoFantasy (52)
feifei1018 (19)
coofucoo (108)
qingrun (67)
btbtd (83)
longrujun (64)
cyz1980 (101)
ssll2826 (10)
EmilMatthew (73)
goodboy1881 (15)
CSDN - 文档中心 - .NET 阅读:3035   评论: 7    参与评论
标题   C#—非对称加密:加密文件     选择自 nieyong 的 Blog
关键字   C# 非对称加密 加密文件
出处  

C#—非对称加密:加密文件
★★★★★★ ☆☆☆ ★★★★★★
●●○○     聂永     ○○●●
§§§§nie_yong@163.com§§§§
◆◆□□nie.yong@126.com□□◆◆
№№№№№№ ※※※ №№№№№№   
说明:
1.你要注意的是读取文件的两种不同方式;
2.从已经保存的钥匙文件中读取其内容;
3.这个程序做的很粗糙(要准备考外语六级,要准备期末考试,实在很忙啊!),希望诸位能够完善,然后也发表出来,在下表示感谢;
4.参考书目: 《C#数据安全手册》;
5.有做这方面程序的朋友,愿意相交。
代码部分:

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.IO;
using System.Text;
using System.Security.Cryptography;
using System.Threading;

namespace 非对称加密
{
 /// <summary>
 /// Form1 的摘要说明。
 /// </summary>
 public class Form1 : System.Windows.Forms.Form
 {
  private System.Windows.Forms.TabControl tabControl1;
  private System.Windows.Forms.TabPage tabPage1;
  private System.Windows.Forms.TabPage tabPage2;
  private System.Windows.Forms.TabPage tabPage3;
  private System.Windows.Forms.Button button1;
  private System.Windows.Forms.Button button2;
  private System.Windows.Forms.Button button3;
  private System.Windows.Forms.SaveFileDialog save;
  private System.Windows.Forms.Label label1;
  private System.Windows.Forms.TextBox textBox1;
  private System.Windows.Forms.Button button4;
  private System.Windows.Forms.Button button5;
  private System.Windows.Forms.Label label2;
  private System.Windows.Forms.RichTextBox richtext2;
  private System.Windows.Forms.OpenFileDialog open;
  private System.Windows.Forms.Label label3;
  private System.Windows.Forms.RichTextBox richtext3;
  private System.Windows.Forms.RichTextBox richtext;
  private System.Windows.Forms.Button button6;
  private System.Windows.Forms.Button button7;
  private System.Windows.Forms.Button button8;
  private System.Windows.Forms.TextBox textBox2;
  private System.Windows.Forms.Label label4;
  private System.Windows.Forms.Button button9;
  private System.Windows.Forms.TextBox textBox3;
  private System.Windows.Forms.Label label5;
  private System.Windows.Forms.Button button10;
  private System.Windows.Forms.Label label6;
  private System.Windows.Forms.Button button11;
  private System.Windows.Forms.Button button12;
  private System.Windows.Forms.RichTextBox richtext4;
  private System.Windows.Forms.Button button13;
  private System.Windows.Forms.Button button14;
  private System.Windows.Forms.Button button15;
  private System.Windows.Forms.TabPage tabPage4;
  private System.Windows.Forms.TextBox textBox4;
  private System.Windows.Forms.Button button16;
  private System.Windows.Forms.TextBox textBox5;
  private System.Windows.Forms.Button button17;
  private System.Windows.Forms.Button button18;
  private System.Windows.Forms.Button button19;
  private System.Windows.Forms.Button button20;
  private System.Windows.Forms.Button button21;
  private System.Windows.Forms.RichTextBox richtext5;
  /// <summary>
  /// 必需的设计器变量。
  private static RSACryptoServiceProvider crypt;
  private static string  privatekey;
  private static string  publickey;
  private static byte [] bytes;
  private static string  publicinfo;
  private static string  privateinfo;
  private static string  readpublickey;
  private static string  readprivatekey;
  //文件打开和是否读取钥匙的标记
  private bool openla = false;
  private bool savela = false;
  private bool readpubkey=false;
  private bool readprikey=false;
  private Thread th;  
  /// </summary>
  private System.ComponentModel.Container components = null;

  public Form1()
  {
   //
   // Windows 窗体设计器支持所必需的
   //
   InitializeComponent();

   //
   // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
   //
  }
  /// <summary>
  /// 清理所有正在使用的资源。
  /// </summary>
  protected override void Dispose( bool disposing )
  {
   if( disposing )
   {
    if (components != null)
    {
     components.Dispose();
    }
   }
   base.Dispose( disposing );
  }

  #region Windows 窗体设计器生成的代码
  /// <summary>
  /// 设计器支持所需的方法 - 不要使用代码编辑器修改
  /// 此方法的内容。
  /// </summary>
  private void InitializeComponent()
  {
   this.tabControl1 = new System.Windows.Forms.TabControl();
   this.tabPage1 = new System.Windows.Forms.TabPage();
   this.button6 = new System.Windows.Forms.Button();
   this.button3 = new System.Windows.Forms.Button();
   this.button2 = new System.Windows.Forms.Button();
   this.richtext = new System.Windows.Forms.RichTextBox();
   this.button1 = new System.Windows.Forms.Button();
   this.tabPage2 = new System.Windows.Forms.TabPage();
   this.button8 = new System.Windows.Forms.Button();
   this.button7 = new System.Windows.Forms.Button();
   this.label3 = new System.Windows.Forms.Label();
   this.richtext3 = new System.Windows.Forms.RichTextBox();
   this.label2 = new System.Windows.Forms.Label();
   this.richtext2 = new System.Windows.Forms.RichTextBox();
   this.button5 = new System.Windows.Forms.Button();
   this.button4 = new System.Windows.Forms.Button();
   this.textBox1 = new System.Windows.Forms.TextBox();
   this.label1 = new System.Windows.Forms.Label();
   this.tabPage3 = new System.Windows.Forms.TabPage();
   this.button15 = new System.Windows.Forms.Button();
   this.button14 = new System.Windows.Forms.Button();
   this.button13 = new System.Windows.Forms.Button();
   this.button12 = new System.Windows.Forms.Button();
   this.button11 = new System.Windows.Forms.Button();
   this.richtext4 = new System.Windows.Forms.RichTextBox();
   this.label6 = new System.Windows.Forms.Label();
   this.button10 = new System.Windows.Forms.Button();
   this.label5 = new System.Windows.Forms.Label();
   this.textBox3 = new System.Windows.Forms.TextBox();
   this.button9 = new System.Windows.Forms.Button();
   this.label4 = new System.Windows.Forms.Label();
   this.textBox2 = new System.Windows.Forms.TextBox();
   this.tabPage4 = new System.Windows.Forms.TabPage();
   this.save = new System.Windows.Forms.SaveFileDialog();
   this.open = new System.Windows.Forms.OpenFileDialog();
   this.textBox4 = new System.Windows.Forms.TextBox();
   this.button16 = new System.Windows.Forms.Button();
   this.textBox5 = new System.Windows.Forms.TextBox();
   this.button17 = new System.Windows.Forms.Button();
   this.button18 = new System.Windows.Forms.Button();
   this.button19 = new System.Windows.Forms.Button();
   this.button20 = new System.Windows.Forms.Button();
   this.button21 = new System.Windows.Forms.Button();
   this.richtext5 = new System.Windows.Forms.RichTextBox();
   this.tabControl1.SuspendLayout();
   this.tabPage1.SuspendLayout();
   this.tabPage2.SuspendLayout();
   this.tabPage3.SuspendLayout();
   this.tabPage4.SuspendLayout();
   this.SuspendLayout();
   //
   // tabControl1
   //
   this.tabControl1.Controls.Add(this.tabPage1);
   this.tabControl1.Controls.Add(this.tabPage2);
   this.tabControl1.Controls.Add(this.tabPage3);
   this.tabControl1.Controls.Add(this.tabPage4);
   this.tabControl1.Location = new System.Drawing.Point(8, 64);
   this.tabControl1.Name = "tabControl1";
   this.tabControl1.SelectedIndex = 0;
   this.tabControl1.Size = new System.Drawing.Size(568, 368);
   this.tabControl1.TabIndex = 0;
   //
   // tabPage1
   //
   this.tabPage1.Controls.Add(this.button6);
   this.tabPage1.Controls.Add(this.button3);
   this.tabPage1.Controls.Add(this.button2);
   this.tabPage1.Controls.Add(this.richtext);
   this.tabPage1.Controls.Add(this.button1);
   this.tabPage1.Location = new System.Drawing.Point(4, 21);
   this.tabPage1.Name = "tabPage1";
   this.tabPage1.Size = new System.Drawing.Size(560, 343);
   this.tabPage1.TabIndex = 0;
   this.tabPage1.Text = "得到钥匙";
   //
   // button6
   //
   this.button6.Location = new System.Drawing.Point(216, 288);
   this.button6.Name = "button6";
   this.button6.TabIndex = 4;
   this.button6.Text = "写入文件";
   this.button6.Click += new System.EventHandler(this.button6_Click);
   //
   // button3
   //
   this.button3.Location = new System.Drawing.Point(456, 16);
   this.button3.Name = "button3";
   this.button3.TabIndex = 3;
   this.button3.Text = "保存私匙";
   this.button3.Click += new System.EventHandler(this.button3_Click);
   //
   // button2
   //
   this.button2.Location = new System.Drawing.Point(320, 16);
   this.button2.Name = "button2";
   this.button2.TabIndex = 2;
   this.button2.Text = "保存公钥";
   this.button2.Click += new System.EventHandler(this.button2_Click);
   //
   // richtext
   //
   this.richtext.Location = new System.Drawing.Point(16, 56);
   this.richtext.Name = "richtext";
   this.richtext.Size = new System.Drawing.Size(520, 184);
   this.richtext.TabIndex = 1;
   this.richtext.Text = "richTextBox1";
   //
   // button1
   //
   this.button1.Location = new System.Drawing.Point(136, 16);
   this.button1.Name = "button1";
   this.button1.Size = new System.Drawing.Size(88, 23);
   this.button1.TabIndex = 0;
   this.button1.Text = "得到钥匙信息";
   this.button1.Click += new System.EventHandler(this.button1_Click);
   //
   // tabPage2
   //
   this.tabPage2.Controls.Add(this.button8);
   this.tabPage2.Controls.Add(this.button7);
   this.tabPage2.Controls.Add(this.label3);
   this.tabPage2.Controls.Add(this.richtext3);
   this.tabPage2.Controls.Add(this.label2);
   this.tabPage2.Controls.Add(this.richtext2);
   this.tabPage2.Controls.Add(this.button5);
   this.tabPage2.Controls.Add(this.button4);
   this.tabPage2.Controls.Add(this.textBox1);
   this.tabPage2.Controls.Add(this.label1);
   this.tabPage2.Location = new System.Drawing.Point(4, 21);
   this.tabPage2.Name = "tabPage2";
   this.tabPage2.Size = new System.Drawing.Size(560, 343);
   this.tabPage2.TabIndex = 1;
   this.tabPage2.Text = "加密解密文字";
   //
   // button8
   //
   this.button8.Location = new System.Drawing.Point(368, 72);
   this.button8.Name = "button8";
   this.button8.TabIndex = 9;
   this.button8.Text = "读取私匙";
   this.button8.Click += new System.EventHandler(this.button8_Click);
   //
   // button7
   //
   this.button7.Location = new System.Drawing.Point(120, 72);
   this.button7.Name = "button7";
   this.button7.TabIndex = 8;
   this.button7.Text = "读取公匙";
   this.button7.Click += new System.EventHandler(this.button7_Click);
   //
   // label3
   //
   this.label3.Location = new System.Drawing.Point(304, 128);
   this.label3.Name = "label3";
   this.label3.Size = new System.Drawing.Size(100, 16);
   this.label3.TabIndex = 7;
   this.label3.Text = "解密结果";
   //
   // richtext3
   //
   this.richtext3.Location = new System.Drawing.Point(280, 152);
   this.richtext3.Name = "richtext3";
   this.richtext3.Size = new System.Drawing.Size(272, 160);
   this.richtext3.TabIndex = 6;
   this.richtext3.Text = "richTextBox2";
   //
   // label2
   //
   this.label2.Location = new System.Drawing.Point(48, 128);
   this.label2.Name = "label2";
   this.label2.Size = new System.Drawing.Size(128, 16);
   this.label2.TabIndex = 5;
   this.label2.Text = "加密窗口:";
   //
   // richtext2
   //
   this.richtext2.Location = new System.Drawing.Point(8, 152);
   this.richtext2.Name = "richtext2";
   this.richtext2.Size = new System.Drawing.Size(256, 160);
   this.richtext2.TabIndex = 4;
   this.richtext2.Text = "richTextBox2";
   //
   // button5
   //
   this.button5.Location = new System.Drawing.Point(352, 96);
   this.button5.Name = "button5";
   this.button5.Size = new System.Drawing.Size(112, 23);
   this.button5.TabIndex = 3;
   this.button5.Text = "使用私匙解密";
   this.button5.Click += new System.EventHandler(this.button5_Click);
   //
   // button4
   //
   this.button4.Location = new System.Drawing.Point(112, 96);
   this.button4.Name = "button4";
   this.button4.Size = new System.Drawing.Size(96, 23);
   this.button4.TabIndex = 2;
   this.button4.Text = "使用公匙加密";
   this.button4.Click += new System.EventHandler(this.button4_Click);
   //
   // textBox1
   //
   this.textBox1.Location = new System.Drawing.Point(104, 32);
   this.textBox1.Multiline = true;
   this.textBox1.Name = "textBox1";
   this.textBox1.Size = new System.Drawing.Size(264, 32);
   this.textBox1.TabIndex = 1;
   this.textBox1.Text = "textBox1";
   //
   // label1
   //
   this.label1.Location = new System.Drawing.Point(128, 8);
   this.label1.Name = "label1";
   this.label1.Size = new System.Drawing.Size(120, 16);
   this.label1.TabIndex = 0;
   this.label1.Text = "请输入加密的文字";
   //
   // tabPage3
   //
   this.tabPage3.Controls.Add(this.button15);
   this.tabPage3.Controls.Add(this.button14);
   this.tabPage3.Controls.Add(this.button13);
   this.tabPage3.Controls.Add(this.button12);
   this.tabPage3.Controls.Add(this.button11);
   this.tabPage3.Controls.Add(this.richtext4);
   this.tabPage3.Controls.Add(this.label6);
   this.tabPage3.Controls.Add(this.button10);
   this.tabPage3.Controls.Add(this.label5);
   this.tabPage3.Controls.Add(this.textBox3);
   this.tabPage3.Controls.Add(this.button9);
   this.tabPage3.Controls.Add(this.label4);
   this.tabPage3.Controls.Add(this.textBox2);
   this.tabPage3.Location = new System.Drawing.Point(4, 21);
   this.tabPage3.Name = "tabPage3";
   this.tabPage3.Size = new System.Drawing.Size(560, 343);
   this.tabPage3.TabIndex = 2;
   this.tabPage3.Text = "加密解密文件";
   //
   // button15
   //
   this.button15.Location = new System.Drawing.Point(208, 128);
   this.button15.Name = "button15";
   this.button15.TabIndex = 12;
   this.button15.Text = "清空文本";
   this.button15.Click += new System.EventHandler(this.button15_Click);
   //
   // button14
   //
   this.button14.Location = new System.Drawing.Point(432, 88);
   this.button14.Name = "button14";
   this.button14.TabIndex = 11;
   this.button14.Text = "读取私匙";
   this.button14.Click += new System.EventHandler(this.button14_Click);
   //
   // button13
   //
   this.button13.Location = new System.Drawing.Point(432, 32);
   this.button13.Name = "button13";
   this.button13.TabIndex = 10;
   this.button13.Text = "读取公匙";
   this.button13.Click += new System.EventHandler(this.button13_Click);
   //
   // button12
   //
   this.button12.Location = new System.Drawing.Point(320, 88);
   this.button12.Name = "button12";
   this.button12.TabIndex = 9;
   this.button12.Text = "开始解密";
   this.button12.Click += new System.EventHandler(this.button12_Click);
   //
   // button11
   //
   this.button11.Location = new System.Drawing.Point(320, 32);
   this.button11.Name = "button11";
   this.button11.TabIndex = 8;
   this.button11.Text = "开始加密";
   this.button11.Click += new System.EventHandler(this.button11_Click);
   //
   // richtext4
   //
   this.richtext4.Location = new System.Drawing.Point(8, 152);
   this.richtext4.Name = "richtext4";
   this.richtext4.Size = new System.Drawing.Size(496, 168);
   this.richtext4.TabIndex = 7;
   this.richtext4.Text = "";
   //
   // label6
   //
   this.label6.Location = new System.Drawing.Point(16, 120);
   this.label6.Name = "label6";
   this.label6.Size = new System.Drawing.Size(168, 23);
   this.label6.TabIndex = 6;
   this.label6.Text = "加密与解密窗口:";
   //
   // button10
   //
   this.button10.Location = new System.Drawing.Point(224, 88);
   this.button10.Name = "button10";
   this.button10.TabIndex = 5;
   this.button10.Text = "Save ...";
   this.button10.Click += new System.EventHandler(this.button10_Click);
   //
   // label5
   //
   this.label5.Location = new System.Drawing.Point(16, 64);
   this.label5.Name = "label5";
   this.label5.Size = new System.Drawing.Size(216, 16);
   this.label5.TabIndex = 4;
   this.label5.Text = "请保存加密好或者解密后的文件";
   //
   // textBox3
   //
   this.textBox3.Location = new System.Drawing.Point(16, 88);
   this.textBox3.Name = "textBox3";
   this.textBox3.Size = new System.Drawing.Size(184, 21);
   this.textBox3.TabIndex = 3;
   this.textBox3.Text = "textBox3";
   //
   // button9
   //
   this.button9.Location = new System.Drawing.Point(224, 32);
   this.button9.Name = "button9";
   this.button9.TabIndex = 2;
   this.button9.Text = "Open ...";
   this.button9.Click += new System.EventHandler(this.button9_Click);
   //
   // label4
   //
   this.label4.Location = new System.Drawing.Point(16, 8);
   this.label4.Name = "label4";
   this.label4.Size = new System.Drawing.Size(216, 16);
   this.label4.TabIndex = 1;
   this.label4.Text = "请选择要加密或者解密的文本文件";
   //
   // textBox2
   //
   this.textBox2.Location = new System.Drawing.Point(16, 32);
   this.textBox2.Name = "textBox2";
   this.textBox2.Size = new System.Drawing.Size(184, 21);
   this.textBox2.TabIndex = 0;
   this.textBox2.Text = "textBox2";
   //
   // tabPage4
   //
   this.tabPage4.Controls.Add(this.richtext5);
   this.tabPage4.Controls.Add(this.button21);
   this.tabPage4.Controls.Add(this.button20);
   this.tabPage4.Controls.Add(this.button19);
   this.tabPage4.Controls.Add(this.button18);
   this.tabPage4.Controls.Add(this.button17);
   this.tabPage4.Controls.Add(this.textBox5);
   this.tabPage4.Controls.Add(this.button16);
   this.tabPage4.Controls.Add(this.textBox4);
   this.tabPage4.Location = new System.Drawing.Point(4, 21);
   this.tabPage4.Name = "tabPage4";
   this.tabPage4.Size = new System.Drawing.Size(560, 343);
   this.tabPage4.TabIndex = 3;
   this.tabPage4.Text = "加密解密其它文件";
   //
   // textBox4
   //
   this.textBox4.Location = new System.Drawing.Point(24, 24);
   this.textBox4.Name = "textBox4";
   this.textBox4.Size = new System.Drawing.Size(240, 21);
   this.textBox4.TabIndex = 0;
   this.textBox4.Text = "textBox4";
   //
   // button16
   //
   this.button16.Location = new System.Drawing.Point(304, 24);
   this.button16.Name = "button16";
   this.button16.TabIndex = 1;
   this.button16.Text = "打开";
   this.button16.Click += new System.EventHandler(this.button16_Click);
   //
   // textBox5
   //
   this.textBox5.Location = new System.Drawing.Point(24, 56);
   this.textBox5.Name = "textBox5";
   this.textBox5.Size = new System.Drawing.Size(240, 21);
   this.textBox5.TabIndex = 2;
   this.textBox5.Text = "textBox5";
   //
   // button17
   //
   this.button17.Location = new System.Drawing.Point(304, 56);
   this.button17.Name = "button17";
   this.button17.TabIndex = 3;
   this.button17.Text = "保存";
   this.button17.Click += new System.EventHandler(this.button17_Click);
   //
   // button18
   //
   this.button18.Location = new System.Drawing.Point(48, 88);
   this.button18.Name = "button18";
   this.button18.TabIndex = 4;
   this.button18.Text = "读取公匙";
   this.button18.Click += new System.EventHandler(this.button18_Click);
   //
   // button19
   //
   this.button19.Location = new System.Drawing.Point(160, 88);
   this.button19.Name = "button19";
   this.button19.TabIndex = 5;
   this.button19.Text = "读取私匙";
   this.button19.Click += new System.EventHandler(this.button19_Click);
   //
   // button20
   //
   this.button20.Location = new System.Drawing.Point(112, 144);
   this.button20.Name = "button20";
   this.button20.TabIndex = 6;
   this.button20.Text = "加密文件";
   this.button20.Click += new System.EventHandler(this.button20_Click);
   //
   // button21
   //
   this.button21.Location = new System.Drawing.Point(232, 144);
   this.button21.Name = "button21";
   this.button21.TabIndex = 7;
   this.button21.Text = "解密文件";
   this.button21.Click += new System.EventHandler(this.button21_Click);
   //
   // richtext5
   //
   this.richtext5.Location = new System.Drawing.Point(88, 200);
   this.richtext5.Name = "richtext5";
   this.richtext5.Size = new System.Drawing.Size(304, 112);
   this.richtext5.TabIndex = 8;
   this.richtext5.Text = "";
   //
   // Form1
   //
   this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
   this.ClientSize = new System.Drawing.Size(584, 453);
   this.Controls.Add(this.tabControl1);
   this.Name = "Form1";
   this.Text = "Form1";
   this.tabControl1.ResumeLayout(false);
   this.tabPage1.ResumeLayout(false);
   this.tabPage2.ResumeLayout(false);
   this.tabPage3.ResumeLayout(false);
   this.tabPage4.ResumeLayout(false);
   this.ResumeLayout(false);

  }
  #endregion

  /// <summary>
  /// 应用程序的主入口点。
  /// </summary>
  [STAThread]
  static void Main()
  {
   Application.Run(new Form1());
  }
        //得到钥匙信息  
  private void button1_Click(object sender, System.EventArgs e)
  {
   crypt=new RSACryptoServiceProvider();
   publickey=crypt.ToXmlString(false);
   richtext.Text="导出秘匙的情况下:\n"+publickey+"\n";
   privatekey=crypt.ToXmlString(true);
   string info="仅仅导出公匙的情况下:\n"+privatekey+"\n";
   richtext.AppendText(info);
   crypt.Clear();  
  }
        //保存公匙信息
  private void button2_Click(object sender, System.EventArgs e)
  {
               
   save=new SaveFileDialog();
   save.Filter="File Text (*.txt)|*.txt|All File (*.*)|*.*";
   save.ShowDialog();
   publicinfo=save.FileName;  
  }
        //保存密匙信息
  private void button3_Click(object sender, System.EventArgs e)
  {
   save=new SaveFileDialog();
   save.Filter="File Text (*.txt)|*.txt|All File (*.*)|*.*";
   save.ShowDialog();
   privateinfo=save.FileName;   
  } 
        //用公匙加密
  private void button4_Click(object sender, System.EventArgs e)
  {
   if(textBox1.Text =="")
   {   
    MessageBox.Show("加密文字信息不能为空!");
    return;   
   }
   if(readpubkey==false)
   {
    MessageBox.Show("请打开公钥所在的文件!");
    return;
   }
   try
   {
    crypt=new RSACryptoServiceProvider();
    UTF8Encoding enc=new UTF8Encoding();
    bytes=enc.GetBytes(textBox1.Text);
    crypt.FromXmlString(  readpublickey );
    bytes = crypt.Encrypt( bytes,false );
    string encryttext=enc.GetString(bytes);
    richtext2.Text="加密结果:\n"+encryttext+"\n"+"加密结束!"; 
   }
   catch
   {
    MessageBox.Show("请检查是否打开公匙或者公匙是否损坏!");
    
   }
  }
        //使用私匙解密
  private void button5_Click(object sender, System.EventArgs e)
  {
   if(readprikey==false)
   {
    MessageBox.Show("请打开密匙所在的文件!");
    return;
   }
   try
   {
    UTF8Encoding enc=new UTF8Encoding();
    byte [] decryptbyte;
    crypt.FromXmlString ( readprivatekey ) ;
    decryptbyte = crypt.Decrypt( bytes,false );
    string decrypttext=enc.GetString( decryptbyte );
    richtext3.Text = "解密结果:\n" + decrypttext + "\n" + "解密结束!" ;
   }
   catch
   {
    MessageBox.Show("请检查是否打开私匙或者私匙是否损坏!");
   
   } 
  }
  //把钥匙信息写入文件
  private void button6_Click(object sender, System.EventArgs e)
  {   
   StreamWriter one=new StreamWriter(publicinfo,true,UTF8Encoding.UTF8);
   one.Write(publickey);
   StreamWriter two=new StreamWriter(privateinfo,true,UTF8Encoding.UTF8);
   two.Write(privatekey);
   one.Flush();
   two.Flush();
   one.Close();
   two.Close();
   MessageBox.Show("成功保存公匙和密匙!");  
  }
        //从文件中读取公匙信息
  private void button7_Click(object sender, System.EventArgs e)
  {   
      readpublickey = ReadPublicKey();
   readpubkey=true;
  }
  
        //从文件中读取私匙信息
  private void button8_Click(object sender, System.EventArgs e)
  {
   
      readprivatekey  = ReadPrivateKey(); 
   readprikey = true;
  }
  
        //打开加密或者解密的文件
  private void button9_Click(object sender, System.EventArgs e)
  {
      open = new OpenFileDialog( );
   open.Filter="Text File (*.txt)|*.txt|All Files (*.*)|*.*";
   open.ShowDialog();
   textBox2.Text=open.FileName;
   openla = true;
  }
        //保存加密或者解密的文件
  private void button10_Click(object sender, System.EventArgs e)
  {
   try
   {
    save=new SaveFileDialog();
    save.Filter="File Text (*.txt)|*.txt|All File (*.*)|*.*";
    save.ShowDialog();
    textBox3.Text=save.FileName;
    savela = true;
   }
   catch
   {
    MessageBox.Show("请输入文件名字!");
    return;
   }

  }
  
        //加密文本文件
  private void button11_Click(object sender, System.EventArgs e)
  {
   if(readpubkey != true)
   {
    MessageBox.Show("请打开公钥所在的文件!");
    return;
   }
   if(openla==true&&savela==true)
   {
    crypt=new RSACryptoServiceProvider();
    crypt.FromXmlString( readpublickey );
    UTF8Encoding enc=new UTF8Encoding();
    //读取原文件到一个string 去啊
    StreamReader sr=new StreamReader(textBox2.Text,Encoding.Default);
    string textinfo=sr.ReadToEnd();
    sr.Close();
  //  richtext4.AppendText( "\n原文件内容:\n" + textinfo + "\n" );
    //开始加密
    string readinfo=EncryptFile(textinfo,textBox3.Text);
    richtext4.AppendText( "加密文件已经保存到:" + textBox3.Text + "\n"  );
    richtext4.AppendText( "加密结果:\n" + readinfo + "\n加密结束!" ); 
   }
   else   
    MessageBox.Show("请选择你要加密的文件或者要保存的文件!");   
  }
        //解密文件
  private void button12_Click(object sender, System.EventArgs e)
  {
   if(readprikey==false)
   {
    MessageBox.Show("请打开密匙所在的文件!");
    return;
   }
   if(openla==true&&savela==true)
   {
    try
    {
     crypt=new RSACryptoServiceProvider();
     crypt.FromXmlString( readprivatekey );
     string decryptinfo = DecryptFile(textBox2.Text,textBox3.Text);
     richtext4.AppendText( "解密文件已经保存到:" + textBox3.Text+ "\n" );
     richtext4.AppendText("解密结果:\n" + decryptinfo + "\n" + "解密结束!\n");
    }
    catch
    {
     MessageBox.Show("请检查密匙文件是否和公匙相对应或者密匙文件损坏!");
     return;
    }
   }
   else
    MessageBox.Show("请选择你要解密的文件或者要保存的文件!");
  }
  
        //加密文件时候,同样要打开公钥匙
  private void button13_Click(object sender, System.EventArgs e)
  {   
   readpublickey = ReadPublicKey();
   readpubkey=true;
  
  }
        //解密文件时候,同样要打开私钥匙
  private void button14_Click(object sender, System.EventArgs e)
  {   
   readprivatekey  =ReadPrivateKey();
   readprikey=true;  
  }
  private void button15_Click(object sender, System.EventArgs e)
  {
   richtext4.Clear();  
  }
 
       //打开文件 
  private void button16_Click(object sender, System.EventArgs e)
  {
   open = new OpenFileDialog( );
   open.Filter="All Files (*.*)|*.*";
   open.ShowDialog();
   textBox4.Text=open.FileName;
   openla = true;  
  }
  //保存文件
  private void button17_Click(object sender, System.EventArgs e)
  {
   save=new SaveFileDialog();
   save.Filter="All File (*.*)|*.*";
   save.ShowDialog();
   textBox5.Text=save.FileName;
   savela = true;
  }
  //加密其它非文本文件
  private void EncryptOther(string file1,string file2)
  {
   FileStream picfs=new FileStream(@file1,FileMode.Open);
   FileStream fs=new FileStream(@file2,FileMode.OpenOrCreate);
   byte [] bytes=new byte[picfs.Length];
   picfs.Read(bytes,0,(int)picfs.Length);
   picfs.Close();
   int blockSize=0;
   if(crypt.KeySize==1024)
    blockSize=16;
   else blockSize=8;   
   byte[]rawblock,encryblock;
   for(int i=0;i<bytes.Length;i+=blockSize)
   {
    if((bytes.Length-i)>blockSize)
     rawblock=new byte[blockSize];
    else rawblock =new byte[bytes.Length-i];
    Buffer.BlockCopy(bytes,i,rawblock,0,rawblock.Length);
    encryblock=crypt.Encrypt(rawblock,false);
    fs.Write(encryblock,0,encryblock.Length);
   }
   fs.Flush();
   fs.Close(); 
  }
  //解密其它非文本文件
  private void DecryptOther(string fileone,string filetwo)
  {
   FileStream fs=new FileStream(@fileone,FileMode.Open);
   FileStream writopic=new FileStream(@filetwo,FileMode.Create);
   byte [] bytes=new byte[fs.Length];
   fs.Read(bytes,0,(int)fs.Length);
   fs.Close();
   MemoryStream ms=new MemoryStream();
   int keySize=crypt.KeySize/8;
   byte[]rawblock,decryptblock;
   for(int i=0;i<bytes.Length;i+=keySize)
   {
    if( ( bytes.Length-i ) > keySize )
    {
     rawblock=new byte[keySize];
    }
    else
    {rawblock =new byte[bytes.Length-i];}

    Buffer.BlockCopy(bytes,i,rawblock,0,rawblock.Length);
    decryptblock = crypt.Decrypt( rawblock,false );
    ms.Write(decryptblock,0,decryptblock.Length);
   }
   ms.Position=0;
   byte [] decode=new byte[ms.Length];
   ms.Read(decode,0,(int)ms.Length);
   ms.Close();          
   writopic.Write(decode,0,decode.Length);
   writopic.Close();

     }
  //创建一个函数,可以在线程中使用
  private void DecryptUsingThread()
  {
   DecryptOther(textBox4.Text,textBox5.Text); 
  }
         //读取公钥匙
  private void button18_Click(object sender, System.EventArgs e)
  {
   readpublickey = ReadPublicKey();
   readpubkey=true;  
  }  
        //读取私钥匙  
  private void button19_Click(object sender, System.EventArgs e)
  {
   readprivatekey = ReadPrivateKey();
   readprikey=true;  
  }
        // 加密其它非文本文件啦
  private void button20_Click(object sender, System.EventArgs e)
  {
   if(readpubkey==false)
   {
    MessageBox.Show("请打开公匙所在的文件!");
    return;
   }
   if(openla==true&&savela==true)
   {
    try
    {
     crypt=new RSACryptoServiceProvider();
     crypt.FromXmlString( readpublickey );
     EncryptOther( textBox4.Text,textBox5.Text );
     richtext5.AppendText("加密过程结束!:\n" + "加密文件已经保存到:\n" + textBox5.Text + "\n");
    }
    catch
    {
     MessageBox.Show("请检查密匙文件是否和公匙相对应或者密匙文件损坏!");
     return;
    }
   }
   else
    MessageBox.Show("请选择你要解密的文件或者要保存的文件!");
  
  }
        //解密其它文件啦
  private void button21_Click(object sender, System.EventArgs e)
  {
   if(readprikey==false)
   {
    MessageBox.Show("请打开密匙所在的文件!");
    return;
   }
   if(openla==true&&savela==true)
   {
    try
    {
     crypt=new RSACryptoServiceProvider();
     crypt.FromXmlString( readprivatekey );
     //使用线程后,反而达不到效果             //原因?暂时不清晰
     //可以转换,但是转换要经过几分钟,才可以真正得到想要的转换的东西。
     th = new Thread( new ThreadStart(  DecryptUsingThread ) );
     th.Start();
    // DecryptOther(textBox4.Text,textBox5.Text);    
     richtext5.AppendText( "解密结束!\n" + "解密文件已经保存到:" + textBox5.Text+ "\n" );    
    }
    catch
    {
     MessageBox.Show("请检查密匙文件是否和公匙相对应或者密匙文件损坏!");
     return;
    }
   }
   else
    MessageBox.Show("请选择你要解密的文件或者要保存的文件!");  
  }

  //下面为自己定义的函数啦
  //单独一个读取公匙的函数
  private string ReadPublicKey()
  { 
   
   string publickey;
   open = new OpenFileDialog( );
   open.Filter="Text File (*.txt)|*.txt|All File (*.*)|*.* ";
   open.ShowDialog();  
   StreamReader sr = new StreamReader(open.FileName,UTF8Encoding.UTF8);  
   publickey = sr.ReadToEnd();
   sr.Close(); 
   return publickey;  
  }
  //单独一个读取私匙的函数
  private string ReadPrivateKey()
  {
   string privatekey;   
   open = new OpenFileDialog( );
   open.Filter="Text File (*.txt)|*.txt|All File (*.*)|*.* ";
   open.ShowDialog();
   StreamReader sr = new StreamReader(open.FileName,UTF8Encoding.UTF8);
   privatekey  = sr.ReadToEnd();
   sr.Close();  
   return privatekey;
  }
  //加密文本文件 
  private string EncryptFile( string textinfo, string filename )
  {    
   UTF8Encoding enc=new UTF8Encoding();   
   byte [] bytes=enc.GetBytes( textinfo );
   int blockSize=0;
   if(crypt.KeySize==1024)
    blockSize=16;
   else
    blockSize=8;
   //同时写入到内存中去
   MemoryStream ms=new MemoryStream();
   //写入文件中去啊。
   FileStream fs=new FileStream(@filename,FileMode.OpenOrCreate);
   byte[]rawblock,encryblock;
   for(int i=0;i<bytes.Length;i+=blockSize)
   {
    if((bytes.Length-i)>blockSize)
     rawblock=new byte[blockSize];
    else
     rawblock =new byte[bytes.Length-i];
    Buffer.BlockCopy(bytes,i,rawblock,0,rawblock.Length);
    encryblock=crypt.Encrypt(rawblock,false);    
    fs.Write(encryblock,0,encryblock.Length);
    //写入到内存中去啊。
    ms.Write(encryblock,0,encryblock.Length);
   }
   //写入到内存中
   ms.Position = 0;
   byte [] decode = new byte[ms.Length];
   ms.Read(decode,0,(int)ms.Length);
   string decodeinfo = enc.GetString(decode,0,decode.Length);   
   fs.Flush();
   fs.Close(); 
   ms.Close();  
   return decodeinfo;
  }

  //解密文本文件
  private string DecryptFile(string encryptfile,string decryptfile)
  {
   //打开加密后的文件,读取文件内容
   FileStream fs=new FileStream(@encryptfile,FileMode.Open);
   byte [] bytes=new byte[fs.Length];
   fs.Read(bytes,0,(int)fs.Length);
   fs.Close();
   //先写入到内存
   MemoryStream ms=new MemoryStream();
   //最好写入到解密后的一个文件
   StreamWriter sw=new StreamWriter(decryptfile);
   int keySize=crypt.KeySize/8;
   byte[]rawblock,decryptblock;
   for(int i=0;i<bytes.Length;i+=keySize)
   {
    if( ( bytes.Length-i ) > keySize )
    {
     rawblock=new byte[keySize];
    }
    else
    {rawblock =new byte[bytes.Length-i];}

    Buffer.BlockCopy(bytes,i,rawblock,0,rawblock.Length);
    decryptblock = crypt.Decrypt( rawblock,false );
    ms.Write(decryptblock,0,decryptblock.Length);
   }
   ms.Position=0;
   byte [] decode=new byte[ms.Length];
   ms.Read(decode,0,(int)ms.Length);
   UTF8Encoding enc=new UTF8Encoding();
   string text=enc.GetString(decode);
   //写入到内存中去啊
   sw.Write(text);
   sw.Flush(); 
   ms.Close();
   sw.Close();
   return text; 
  }

  //加密其它非文本文件,当然可以包括文本文件
  private void EncryptOther(string file1,string file2)
  {
   FileStream picfs=new FileStream(@file1,FileMode.Open);
   FileStream fs=new FileStream(@file2,FileMode.OpenOrCreate);
   byte [] bytes=new byte[picfs.Length];
   picfs.Read(bytes,0,(int)picfs.Length);
   picfs.Close();
   int blockSize=0;
   if(crypt.KeySize==1024)
    blockSize=16;
   else blockSize=8;   
   byte[]rawblock,encryblock;
   for(int i=0;i<bytes.Length;i+=blockSize)
   {
    if((bytes.Length-i)>blockSize)
     rawblock=new byte[blockSize];
    else rawblock =new byte[bytes.Length-i];
    Buffer.BlockCopy(bytes,i,rawblock,0,rawblock.Length);
    encryblock=crypt.Encrypt(rawblock,false);
    fs.Write(encryblock,0,encryblock.Length);
   }
   fs.Flush();
   fs.Close(); 
  }
  //解密其它非文本文件,当然可以包括文本文件
  private void DecryptOther(string fileone,string filetwo)
  {
   FileStream fs=new FileStream(@fileone,FileMode.Open);
   FileStream writopic=new FileStream(@filetwo,FileMode.Create);
   byte [] bytes=new byte[fs.Length];
   fs.Read(bytes,0,(int)fs.Length);
   fs.Close();
   MemoryStream ms=new MemoryStream();
   int keySize=crypt.KeySize/8;
   byte[]rawblock,decryptblock;
   for(int i=0;i<bytes.Length;i+=keySize)
   {
    if( ( bytes.Length-i ) > keySize )
    {
     rawblock=new byte[keySize];
    }
    else
    {rawblock =new byte[bytes.Length-i];}

    Buffer.BlockCopy(bytes,i,rawblock,0,rawblock.Length);
    decryptblock = crypt.Decrypt( rawblock,false );
    ms.Write(decryptblock,0,decryptblock.Length);
   }
   ms.Position=0;
   byte [] decode=new byte[ms.Length];
   ms.Read(decode,0,(int)ms.Length);
   ms.Close();          
   writopic.Write(decode,0,decode.Length);
   writopic.Close();

  }
  //创建一个函数,可以在线程中使用,经实验,效果不明显
  private void DecryptUsingThread()
  {
   DecryptOther(textBox4.Text,textBox5.Text); 
  }
     
 }
}


相关文章
对该文的评论
CSDN 网友 ( 2004-08-01)
还好,可以用Stream方法,这样就不限制大小了
CSDN 网友 ( 2004-08-01)
byte[]大小有限制,还需改进呀,几十字都处理不了
CSDN 网友 ( 2004-06-27)
这种代码不要写,写下方法就可以了,什么button label一大队。。。晕
CSDN 网友 ( 2004-06-18)
我还以为是用C#实现加密算法呢!看到的却是一堆Button...
zzzl ( 2004-05-31)
其实也就只是两三个函数在起作用,却写一大堆