如题,C#如何使用DES对zip文件加密?
压缩包zip文件中含有txt、excel、图片以及音视频文件;
密钥是固定的,如“2012-deszip”,请问各位大侠们,该如何实现呢?
压缩包zip文件中含有txt、excel、图片以及音视频文件;
密钥是固定的,如“2012-deszip”,请问各位大侠们,该如何实现呢?
解决方案 »
- 对一张空表查询 select max() from table 时 dataReader.hasRows属性为什么为空
- 求winform源码!
- 如何提取文字的默认字体,颜色,大小?
- 神经衰弱了,再问个
- 很棘手的问题!!
- System.Net.Sockets.SocketException: 您的主机中的软件放弃了一个已建立的连接
- 文件流file stream和字符串在实现上和性能上的比对?
- asp.net中,用C#操控EXCEL,怎样解决EXCEL进程死锁问题。
- C# 扩展方法和继承
- dataGridView1.Rows[0].Cells[0].Value.ToString(),放在代码不同位置值为什么会不一样
- 求datagridview分页代码
- winform 在DataGridview中的checkbox如何实现单选?
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Text;
using System.IO;
using System.Security.Cryptography;public partial class Default2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{ }
private static byte[] Keys = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };//自定义密匙
private string filePathA;//储存文件路径
private string filePathB;//储存文件复制后的路径
/// <summary>
/// 文件加密
/// </summary>
/// <param name="inFile">文件储存路径</param>
/// <param name="outFile">储存文件复制的路径</param>
/// <param name="encryptKey"></param>
/// <returns></returns>
public bool EncryptDES(string inFile, string outFile, string encryptKey)
{
byte[] rgb = Keys;
try
{
byte[] rgbKeys = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8));
FileStream inFs = new FileStream(inFile, FileMode.Open, FileAccess.Read);//读入流
FileStream outFs = new FileStream(outFile, FileMode.OpenOrCreate, FileAccess.Write);// 等待写入流
outFs.SetLength(0);//帮助读写的变量
byte[] byteIn = new byte[100];//放临时读入的流
long readLen = 0;//读入流的长度
long totalLen = inFs.Length;//读入流的总长度
int everylen=0;//每次读入流的长度
DES des = new DESCryptoServiceProvider();//将inFile加密后放到outFile
CryptoStream encStream = new CryptoStream(outFs, des.CreateEncryptor(rgb, rgbKeys), CryptoStreamMode.Write);
while (readLen < totalLen)
{
everylen = inFs.Read(byteIn, 0, 100);
encStream.Write(byteIn, 0, everylen);
readLen = readLen + everylen;
}
encStream.Close();
inFs.Close();
outFs.Close();
return true;//加密成功
}
catch (Exception ex)
{
Response.Write(ex.Message.ToString());
return false;//加密失败
}
}
public bool DecryptDES(string inFile, string outFile, string encryptKey)
{
byte[] rgb = Keys;
try
{
byte[] rgbKeys = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8));
FileStream inFs = new FileStream(inFile, FileMode.Open, FileAccess.Read);//读入流
FileStream outFs = new FileStream(outFile, FileMode.OpenOrCreate, FileAccess.Write);// 等待写入流
outFs.SetLength(0);//帮助读写的变量
byte[] byteIn = new byte[100];//放临时读入的流
long readLen = 0;//读入流的长度
long totalLen = inFs.Length;//读入流的总长度
int everylen=0;//每次读入流的长度
DES des = new DESCryptoServiceProvider();//将inFile加密后放到outFile
CryptoStream encStream = new CryptoStream(outFs, des.CreateDecryptor(rgb, rgbKeys), CryptoStreamMode.Write);
while (readLen < totalLen)
{
everylen = inFs.Read(byteIn, 0, 100);
encStream.Write(byteIn, 0, everylen);
readLen = readLen + everylen;
}
encStream.Close();
inFs.Close();
outFs.Close();
return true;//加密成功
}
catch (Exception ex)
{
Response.Write(ex.Message.ToString());
return false;//加密失败
}
}
/// <summary>
/// 拷贝文件
/// </summary>
public void copyFile()
{
filePathA = this.fei.PostedFile.FileName;//获取文件全部路径
string fileName = this.fei.FileName;
string path = System.IO.Path.GetDirectoryName(filePathA);
filePathB = path + "\\1" + fileName;//重新设置文件名
File.Copy(filePathA, filePathB);
} protected void btnOK_Click(object sender, EventArgs e)
{
copyFile();
if (EncryptDES(filePathB, filePathA, "mingrisoft"))
{
RegisterStartupScript("false", "<script>alert('加密成功!\\n');</script>");
}
else
{
RegisterStartupScript("false", "<script>alert('失败成功!\\n');</script>");
}
File.Delete(filePathB);
}
protected void btnCancel_Click(object sender, EventArgs e)
{
copyFile();
if (DecryptDES(filePathB, filePathA, "mingrisoft"))
{
RegisterStartupScript("false", "<script>alert('加密成功!\\n');</script>");
}
else
{
RegisterStartupScript("false", "<script>alert('失败成功!\\n');</script>");
}
File.Delete(filePathB);
}
}
private static byte[] Keys = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };//自定义密匙
byte[] rgbKeys = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8));
这两句需要改吗?谢谢!