📄 form1.cs
字号:
}
#endregion
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
#region 解密
private void button3_Click(object sender, System.EventArgs e)
{
if(this.textBox1.Text!=""&&this.textBox2.Text!="")
{
statusBar1.Visible=true;
statusBar1.Text="正在解密文件,请等待.....";
if(DecryptFile(this.textBox1.Text,this.textBox2.Text,"123456"))
{
statusBar1.Text="解密完成。";
MessageBox.Show("解密成功!");
}
statusBar1.Visible=false;
}
else
{
MessageBox.Show("文件路径不能为空");
}
}
#endregion
#region 加密
private void button2_Click(object sender, System.EventArgs e)
{
if(this.textBox1.Text!=""&&this.textBox2.Text!="")
{
statusBar1.Visible=true;
statusBar1.Text="正在加密文件,请等待.....";
if(EncryptFile(this.textBox1.Text,this.textBox2.Text,"123456"))
{
statusBar1.Text="加密完成。";
MessageBox.Show("加密成功!");
}
statusBar1.Visible=false;
}
else
{
MessageBox.Show("文件路径不能为空");
}
}
#endregion
#region 打开保存文件
private void button1_Click(object sender, System.EventArgs e)
{
openFileDialog1.ShowDialog();
string filename=openFileDialog1.FileName;
int i=filename.LastIndexOf(".");
if(i!=-1)
{
string filetype=filename.Substring(filename.LastIndexOf("."));
if(this.radioButton1.Checked)
{
filename=filename.Replace("(解密文件)","");
textBox2.Text=filename.Substring(0,filename.LastIndexOf("."))+"(加密文件)"+filetype;
}
else
{
filename=filename.Replace("(加密文件)","");
textBox2.Text=filename.Substring(0,filename.LastIndexOf("."))+"(解密文件)"+filetype;
}
}
if(filename!="")
{
textBox1.Text=openFileDialog1.FileName;
}
}
private void button4_Click(object sender, System.EventArgs e)
{
this.saveFileDialog1.ShowDialog();
if(saveFileDialog1.FileName!="")
{
this.textBox2.Text=saveFileDialog1.FileName;
}
}
#endregion
#region 加密方法
public bool EncryptFile(string filePath,string savePath,string keyStr)
{ /* 类中创建一个命名为 EncryptFile 的方法。EncryptFile 类必须具有以下 3 个参数: * sInputFilename sOutputFilename sKey(用于加密和解密文件的密钥。) */
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
/*声明一个 DESCryptoServiceProvider 类的实例。这表示对文件使用的实际加密和解密技术*/
if(keyStr=="")
keyStr=key;
FileStream fs=File.OpenRead(filePath);
/*在 EncryptFile 过程中,创建一个输入 FileStream 对象和一个输出 FileStream 对象。这些对象可以从目标文件中读取和向其中写入。*/
byte[] inputByteArray =new byte[fs.Length];
fs.Read(inputByteArray,0,(int)fs.Length);
fs.Close();
byte[] keyByteArray=Encoding.Default.GetBytes(keyStr);
SHA1 ha=new SHA1Managed();
byte[] hb=ha.ComputeHash(keyByteArray);
sKey=new byte[8];
sIV=new byte[8];
for(int i=0;i<8;i++)
sKey[i]=hb[i];
for (int i = 8; i < 16; i++) //数据加密标准 (DES) 使用等于 8 个字节或 8 个字符的 64 位密钥
sIV[i-8]=hb[i];
des.Key=sKey;
des.IV = sIV; //DESCryptoService基于一种对称加密算法。对称加密需要密钥和初始化矢量 (IV) 来加密数据
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms,des.CreateEncryptor(),CryptoStreamMode.Write);
/*创建一个 CryptoStream 类的实例,方法是:使用加密提供程序获得一个加密对象(CreateEncryptor),
* 并将现有的输出 FileStream 对象作为构造函数的一部分。
CryptoStream 类设计用于在内容以流的形式输出到文件时加密和解密内容 */
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
fs=File.OpenWrite(savePath);
foreach(byte b in ms.ToArray())
{
fs.WriteByte(b);
} //读入输入文件,然后写出到输出文件。传递 CryptoStream 对象,文件将使用您提供的密钥加密。
fs.Close();
cs.Close();
ms.Close();
return true;
}
#endregion
#region 解密方法
public bool DecryptFile(string filePath,string savePath,string keyStr)
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
if(keyStr=="")
keyStr=key;
FileStream fs=File.OpenRead(filePath);
byte[] inputByteArray =new byte[fs.Length];
fs.Read(inputByteArray,0,(int)fs.Length);
fs.Close();
byte[] keyByteArray=Encoding.Default.GetBytes(keyStr);
SHA1 ha=new SHA1Managed();
byte[] hb=ha.ComputeHash(keyByteArray);
sKey=new byte[8];
sIV=new byte[8];
for(int i=0;i<8;i++)
sKey[i]=hb[i];
for(int i=8;i<16;i++)
sIV[i-8]=hb[i];
des.Key=sKey;
des.IV=sIV;
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms,des.CreateDecryptor(),CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
fs=File.OpenWrite(savePath);
foreach(byte b in ms.ToArray())
{
fs.WriteByte(b);
}
fs.Close();
cs.Close();
ms.Close();
return true;
}
#endregion
#region 关闭
private void button5_Click(object sender, System.EventArgs e)
{
this.Close();
}
#endregion
#region 单选按钮
private void radioButton1_CheckedChanged(object sender, System.EventArgs e)
{
if(radioButton1.Checked==true)
{
this.button2.Enabled=true;
this.button3.Enabled=false;
}
}
private void radioButton2_CheckedChanged(object sender, System.EventArgs e)
{
if(radioButton2.Checked==true)
{
this.button2.Enabled=false;
this.button3.Enabled=true;
}
}
#endregion
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -