C#-对称加密的一个例子 Rijndael

80酷酷网    80kuku.com

  加密

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

namespace 对称加密应用
{
 ///
 /// Form1 的摘要说明。
 ///
 public class Form1 : System.Windows.Forms.Form
 {
  private System.Windows.Forms.TextBox textBox1;
  private System.Windows.Forms.TextBox textBox2;
  private System.Windows.Forms.Button button1;
  private System.Windows.Forms.Button button2;
  ///
  /// 必需的设计器变量。
 
  private System.Windows.Forms.TextBox textBox3;
  private System.Windows.Forms.OpenFileDialog openfile;
  private System.Windows.Forms.Button button3;
  private System.Windows.Forms.SaveFileDialog savefile;
  private System.Windows.Forms.Button button4;
  private System.Windows.Forms.Label label1;
  private System.Windows.Forms.Label label2;
  private System.Windows.Forms.CheckBox checkBox1;

  //创建实例
  RijndaelManaged rij = new RijndaelManaged();//
  //全局变量,标记文件的扩展名
  private static string ext=null;
  //标记加密成功与否
  private static bool enresult = false;
  //标记解密成功与否的标记
  private static bool deresult = false;
 
  ///
  private System.ComponentModel.Container components = null;

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

   //
   // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
   //
  }

  ///
  /// 清理所有正在使用的资源。
  ///
  protected override void Dispose( bool disposing )
  {
   if( disposing )
   {
    if (components != null)
    {
     components.Dispose();
    }
   }
   base.Dispose( disposing );
  }

  #region Windows 窗体设计器生成的代码
  ///
  /// 设计器支持所需的方法 - 不要使用代码编辑器修改
  /// 此方法的内容。
  ///
  private void InitializeComponent()
  {
   this.textBox1 = new System.Windows.Forms.TextBox();
   this.textBox2 = new System.Windows.Forms.TextBox();
   this.button1 = new System.Windows.Forms.Button();
   this.button2 = new System.Windows.Forms.Button();
   this.textBox3 = new System.Windows.Forms.TextBox();
   this.openfile = new System.Windows.Forms.OpenFileDialog();
   this.button3 = new System.Windows.Forms.Button();
   this.savefile = new System.Windows.Forms.SaveFileDialog();
   this.button4 = new System.Windows.Forms.Button();
   this.label1 = new System.Windows.Forms.Label();
   this.label2 = new System.Windows.Forms.Label();
   this.checkBox1 = new System.Windows.Forms.CheckBox();
   this.SuspendLayout();
   //
   // textBox1
   //
   this.textBox1.Location = new System.Drawing.Point(88, 96);
   this.textBox1.Name = "textBox1";
   this.textBox1.Size = new System.Drawing.Size(168, 21);
   this.textBox1.TabIndex = 0;
   this.textBox1.Text = "";
   //
   // textBox2
   //
   this.textBox2.Location = new System.Drawing.Point(88, 136);
   this.textBox2.Name = "textBox2";
   this.textBox2.Size = new System.Drawing.Size(168, 21);
   this.textBox2.TabIndex = 1;
   this.textBox2.Text = "";
   //
   // button1
   //
   this.button1.Location = new System.Drawing.Point(88, 200);
   this.button1.Name = "button1";
   this.button1.TabIndex = 2;
   this.button1.Text = "加密";
   this.button1.Click += new System.EventHandler(this.button1_Click);
   //
   // button2
   //
   this.button2.Location = new System.Drawing.Point(192, 200);
   this.button2.Name = "button2";
   this.button2.TabIndex = 3;
   this.button2.Text = "解密";
   this.button2.Click += new System.EventHandler(this.button2_Click);
   //
   // textBox3
   //
   this.textBox3.HideSelection = false;
   this.textBox3.Location = new System.Drawing.Point(88, 48);
   this.textBox3.MaxLength = 17;
   this.textBox3.Name = "textBox3";
   this.textBox3.PasswordChar = '$';
   this.textBox3.TabIndex = 4;
   this.textBox3.Text = "";
   this.textBox3.TextAlign = System.Windows.Forms.HorizontalAlignment.Center;
   //
   // button3
   //
   this.button3.Location = new System.Drawing.Point(280, 96);
   this.button3.Name = "button3";
   this.button3.Size = new System.Drawing.Size(40, 23);
   this.button3.TabIndex = 5;
   this.button3.Text = "Open";
   this.button3.Click += new System.EventHandler(this.button3_Click);
   //
   // button4
   //
   this.button4.Location = new System.Drawing.Point(280, 136);
   this.button4.Name = "button4";
   this.button4.Size = new System.Drawing.Size(40, 23);
   this.button4.TabIndex = 6;
   this.button4.Text = "Save";
   this.button4.Click += new System.EventHandler(this.button4_Click);
   //
   // label1
   //
   this.label1.Location = new System.Drawing.Point(88, 24);
   this.label1.Name = "label1";
   this.label1.Size = new System.Drawing.Size(136, 23);
   this.label1.TabIndex = 7;
   this.label1.Text = "请输入你的密码:";
   //
   // label2
   //
   this.label2.Location = new System.Drawing.Point(216, 48);
   this.label2.Name = "label2";
   this.label2.Size = new System.Drawing.Size(184, 23);
   this.label2.TabIndex = 8;
   this.label2.Text = "(密码大小8至16个字符)";
   //
   // checkBox1
   //
   this.checkBox1.Location = new System.Drawing.Point(88, 168);
   this.checkBox1.Name = "checkBox1";
   this.checkBox1.Size = new System.Drawing.Size(216, 24);
   this.checkBox1.TabIndex = 9;
   this.checkBox1.Text = "删除源文件";
   //
   // Form1
   //
   this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
   this.ClientSize = new System.Drawing.Size(456, 278);
   this.Controls.Add(this.checkBox1);
   this.Controls.Add(this.label2);
   this.Controls.Add(this.label1);
   this.Controls.Add(this.button4);
   this.Controls.Add(this.button3);
   this.Controls.Add(this.textBox3);
   this.Controls.Add(this.button2);
   this.Controls.Add(this.button1);
   this.Controls.Add(this.textBox2);
   this.Controls.Add(this.textBox1);
   this.Name = "Form1";
   this.Text = "Form1";
   this.ResumeLayout(false);

  }
  #endregion

  ///
  /// 应用程序的主入口点。
  ///
  [STAThread]
  static void Main()
  {
   Application.Run(new Form1());
  }

        //加密文件的按钮
  private void button1_Click(object sender, System.EventArgs e)
  {
   if(textBox1.Text != null || textBox2.Text != null)
                encryption(textBox3.Text,textBox1.Text,textBox2.Text);
   if(checkBox1.Checked==true && enresult==true)
    DeleteFile(textBox1.Text);
  }
  //用于加密的函数
  public void encryption(string textBox,string readfile,string writefile)
  {
   try
   {
    if(textBox.Length >=8 && textBox.Length<=16 )//判断密码的字符的大小
    {
   
     byte [] key = System.Text.Encoding.Default.GetBytes( textBox );
     byte [] iv  = rij.IV;
     Rijndael crypt = Rijndael.Create();
     ICryptoTransform transform = crypt.CreateEncryptor(key ,iv);  
     //写进文件
     FileStream fswrite = new FileStream(writefile,FileMode.Create);
     CryptoStream cs = new CryptoStream( fswrite ,transform ,CryptoStreamMode.Write ); 
     //打开文件
     FileStream fsread = new FileStream(readfile,FileMode.Open);
     int length;
     while((length = fsread.ReadByte() )!= -1)
      cs.WriteByte((byte)length);

     fsread.Close();
     cs.Close();
     fswrite.Close();
     enresult = true ;//成功加密
     MessageBox.Show("已经成功完成加密任务!");
    }
    else
    {
       MessageBox.Show("密码的最小长度为8个字符,最大长度为16个字符!");
     return ;
    }
   }
   catch (Exception e)
   {
    MessageBox.Show(e.ToString());
   }
  }
  //用于解密的函数
  public void decryption(string textBox,string readfile,string writefile)
  {
   try
   {
    if(textBox.Length >=8 && textBox.Length<=16 )
    {
     byte [] key = System.Text.Encoding.Default.GetBytes( textBox );
     byte [] iv  = rij.IV;
     Rijndael crypt = Rijndael.Create();
     ICryptoTransform transform = crypt.CreateDecryptor(key,iv);  
     //读取加密后的文件
     FileStream fsopen = new FileStream(readfile,FileMode.Open);
     CryptoStream cs = new CryptoStream( fsopen ,transform ,CryptoStreamMode.Read ); 
     //把解密后的结果写进文件
     FileStream fswrite = new FileStream(writefile,FileMode.OpenOrCreate);
     int length;
     while ((length = cs.ReadByte()) != -1)
      fswrite.WriteByte((byte)length);

     fswrite.Close();
     cs.Close();
     fsopen.Close();
     deresult=true; //成功解密
     MessageBox.Show("已经成功完成解密任务!");
    }
    else
    {
       MessageBox.Show("密码的最小长度为8个字符,最大长度为16个字符!");
     return ;
    }
   }
   catch (Exception e)
   {
    MessageBox.Show(e.ToString());
   }
  }
        //解密文件
  private void button2_Click(object sender, System.EventArgs e)
  {
            decryption( textBox3.Text,textBox1.Text,textBox2.Text ) ;
   if(checkBox1.Checked==true && deresult==true)
    DeleteFile(textBox1.Text);
  }
       //用于打开文件的按钮
  private void button3_Click(object sender, System.EventArgs e)
  {
   openfile = new OpenFileDialog();openfile.Filter ="All files (*.*)|*.*" ;   
   openfile.ShowDialog();
   textBox1.Text = openfile.FileName;
   ext = getfileext(openfile.FileName);
  }

  private void button4_Click(object sender, System.EventArgs e)
  {
   savefile = new SaveFileDialog();
   savefile.Filter =ext + " files" +"(*."+ext+")|*."+ ext +"|All files (*.*)|*.*" ;
   savefile.ShowDialog();
   textBox2.Text = savefile.FileName;
  }
  //得到文件的扩展名
  private string getfileext(string filename)
  {
   try
   {
    char [] point = new char[] {'.'};
    string [] filename2 = filename.Split(point);
    return filename2[1];
   }
   catch
   {
    return null;
   }
  }
  //删除文件的函数
  public void DeleteFile(string filename)
  {
   try
   {
    File.Delete(filename);   
   }
   catch (Exception e)
   {
    MessageBox.Show(e.ToString());
   }
  }

 }
}

 

分享到
  • 微信分享
  • 新浪微博
  • QQ好友
  • QQ空间
点击: