-2

我使用 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();
                }
            }
        }
    }
4

2 回答 2

2

您正在使用加密算法覆盖 zip 文件的内部结构。
您怎么能期望外部 zip 管理器将您的加密文件识别为有效的 zip 文件?
如果您真的想使用受密码保护的 zip 文件,请使用可以为您执行此操作的库,而不会破坏 zip 文件结构。

我推荐这个库DotNetZip

于 2012-10-16T09:29:41.613 回答
-1

如果格式不是 zip,则无法解压缩文件。加密文件后,格式不再是 zip。
但是可以在 C# 中同时执行加密和压缩。为了获得更好的压缩率,您需要先压缩文件然后加密。
您可以使用GZipstream进行压缩,并使用您描述的代码进行加密。

于 2012-10-16T09:40:13.713 回答