C#实现加密下载文件
以下是一个使用C#实现文件加密下载的示例代码:
using System;
using System.IO;
using System.Security.Cryptography;
using System.Web;
using System.Web.UI;
public partial class Download : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string filePath = Server.MapPath("~/Files/encryptedFile.txt");
string fileName = "encryptedFile.txt";
byte[] fileBytes = File.ReadAllBytes(filePath);
// 生成密钥和向量
byte[] key = new byte[32];
byte[] iv = new byte[16];
using (RijndaelManaged aes = new RijndaelManaged())
{
aes.GenerateKey();
aes.GenerateIV();
key = aes.Key;
iv = aes.IV;
}
// 加密文件
byte[] encryptedBytes;
using (RijndaelManaged aes = new RijndaelManaged())
{
aes.Key = key;
aes.IV = iv;
using (MemoryStream ms = new MemoryStream())
{
using (CryptoStream cs = new CryptoStream(ms, aes.CreateEncryptor(), CryptoStreamMode.Write))
{
cs.Write(fileBytes, 0, fileBytes.Length);
cs.Close();
}
encryptedBytes = ms.ToArray();
}
}
// 将密钥和向量存储在Session中以便下载时使用
Session["Key"] = key;
Session["IV"] = iv;
// 构造下载文件的响应
Response.Clear();
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName);
Response.BinaryWrite(encryptedBytes);
Response.End();
}
}
在这个示例中,我们首先读取要下载的文件的字节数组。然后,我们使用RijndaelManaged类生成一个随机密钥和向量,并使用它们对文件进行加密。加密后,我们将密钥和向量存储在Session中,以便在下载时使用。最后,我们使用Response.BinaryWrite方法将加密后的字节数组发送到客户端以进行下载。
在下载页面上,我们需要使用存储在Session中的密钥和向量来解密文件。以下是下载页面的示例代码:
using System;
using System.IO;
using System.Security.Cryptography;
using System.Web;
using System.Web.UI;
public partial class Download : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string filePath = Server.MapPath("~/Files/encryptedFile.txt");
string fileName = "encryptedFile.txt";
// 从Session中获取密钥和向量
byte[] key = (byte[])Session["Key"];
byte[] iv = (byte[])Session["IV"];
// 读取加密后的文件
byte[] encryptedBytes = new byte[Request.InputStream.Length];
Request.InputStream.Read(encryptedBytes, 0, encryptedBytes.Length);
// 解密文件
byte[] decryptedBytes;
using (RijndaelManaged aes = new RijndaelManaged())
{
aes.Key = key;
aes.IV = iv;
using (MemoryStream ms = new MemoryStream())
{
using (CryptoStream cs = new CryptoStream(ms, aes.CreateDecryptor(), CryptoStreamMode.Write))
{
cs.Write(encryptedBytes, 0, encryptedBytes.Length);
cs.Close();
}
decryptedBytes = ms.ToArray();
}
}
// 构造下载文件的响应
Response.Clear();
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName);
Response.BinaryWrite(decryptedBytes);
Response.End();
}
}
在这个示例中,我们首先从Session中获取密钥和向量。然后,我们读取加密后的文件字节数组,并使用密钥和向量对其进行解密。解密后,我们使用Response.BinaryWrite方法将解密后的字节数组发送到客户端以进行下载。
请注意,这只是一个基本示例。在实际应用程序中,您可能需要更多的安全性和错误处理。
原文地址: https://www.cveoy.top/t/topic/bhZ2 著作权归作者所有。请勿转载和采集!