你好,游客 登录 注册 搜索
背景:
阅读新闻

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

[日期:2004-08-01] 来源:CSDN  作者:nieyong [字体: ]

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());
   }
  }


 }
}

收藏 推荐 打印 | 录入:木鸟 | 阅读:
本文评论   查看全部评论 (2)
表情: 表情 姓名: 字数
点评:
       
评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款
第 2 楼
* hello 发表于 2005-5-7 16:35:18
Rijndael 是从哪里来的阿?
第 1 楼
* 寒鸦 发表于 2004-10-18 22:40:18
加油啊 !
很好,我还可以看懂几行!
热门评论
* hello 发表于 2005-5-7 16:35:18
Rijndael 是从哪里来的阿?
* 寒鸦 发表于 2004-10-18 22:40:18
加油啊 !
很好,我还可以看懂几行!