我使用AESManaged Class来加密zip文件,但winzip / 7zip无法解压缩。我只能在我的代码中解密后解压缩它。
以下是我用来加密和解密的代码。有人可以帮忙吗?
private static void EncryptFile(string input, string output, string pwd)
{
using (AesManaged aes = new AesManaged())
{
FileStream fsCrypt=null;
try
{
byte[] key = Encoding.UTF8.GetBytes(pwd);
fsCrypt = new FileStream(output, FileMode.Create);
using (CryptoStream cs = new CryptoStream(fsCrypt, aes.CreateEncryptor(key, key), CryptoStreamMode.Write))
{
using (FileStream fsIn = new FileStream(input, FileMode.Open))
{
int data;
while ((data = fsIn.ReadByte()) != -1)
{
cs.WriteByte((byte)data);
}
aes.Clear();
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
aes.Clear();
}
finally
{
if(fsCrypt!=null)
{
fsCrypt.Dispose();
}
}
}
}
private static void DecryptFile(string input, string output, string pwd)
{
using (AesManaged aes = new AesManaged())
{
FileStream fsCrypt = null;
try
{
byte[] key = Encoding.UTF8.GetBytes(pwd);
fsCrypt = new FileStream(input, FileMode.Open);
{
using (FileStream fsOut = new FileStream(output, FileMode.Create))
{
using (CryptoStream cs = new CryptoStream(fsCrypt, aes.CreateDecryptor(key, key), CryptoStreamMode.Read))
{
int data;
while ((data = cs.ReadByte()) != -1)
{
fsOut.WriteByte((byte)data);
}
aes.Clear();
}
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
aes.Clear();
}
finally
{
if (fsCrypt != null)
{
fsCrypt.Dispose();
}
}
}
}
答案 0 :(得分:2)
您正在使用加密算法覆盖zip文件的内部结构 您如何期望外部zip管理器将您的加密文件识别为有效的zip文件? 如果您真的想使用受密码保护的zip文件,请使用可以为您执行此操作的库,而不会破坏zip文件结构。
我推荐这个库DotNetZip
答案 1 :(得分:-1)
如果格式不是zip格式,则无法解压缩文件。加密文件后,格式不再是zip格式。
但是可以在C#中执行加密和压缩。为了获得更好的压缩率,您需要先压缩文件然后加密。
您可以使用GZipstream进行压缩,并使用您描述的代码进行加密。