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