-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 に答える