概要

今日のデジタル環境ではデータ セキュリティが最も重要であり、機密情報を保護する効果的な方法の 1 つは暗号化です。この概要では、アーカイブ全体またはアーカイブ内の特定のエントリを暗号化または復号化し、データの機密性と整合性を確保する方法について説明します。 Aspose.ZIP は、アーカイブの暗号化と復号化に関連するさまざまな操作を容易にします。

ZIP アーカイブ全体を暗号化または復号化する方法

従来の方法で ZIP アーカイブを暗号化する

ZIP アーカイブには 2 つの暗号化方式が使用できます。1 つは従来の暗号化方式で、現在は弱いと考えられていますが、もう 1 つは最新の AES です。 ZIP 標準では、同じアーカイブ内であっても、これらの方法のいずれかを使用してエントリを暗号化できます。 AES 暗号化はより強力なセキュリティを提供し、さまざまなキー長 (128 ビット、192 ビット、および 256 ビット) で使用できます。 ZIP アーカイブ内の機密データをより適切に保護します。

Deflate で圧縮されたファイル

    using (var zipFile = File.Open("archive.zip", FileMode.Create))
    {
        using (var source = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
        {
            var archive = new Archive(new ArchiveEntrySettings(CompressionSettings.Deflate, new TraditionalEncryptionSettings("p@s$")));
            archive.CreateEntry("alice29.txt", source);
            archive.Save(zipFile);
        }
    }

AES方式によるアーカイブ全体の暗号化

    using (var zipFile = File.Open("archive.zip", FileMode.Create))
    {
        using (var source = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
        {
            using (var archive = new Archive(new ArchiveEntrySettings(CompressionSettings.Deflate, new AesEcryptionSettings("p@s$", EncryptionMethod.AES256))))
            {
                archive.CreateEntry("alice29.txt", source);
                archive.Save(zipFile);
            }
        }
    }

これらのサンプルは、 EncryptionSetting インスタンスを対応する Archive コンストラクター 。これにより、個々のエントリを選択的に暗号化し、他のエントリを暗号化しないようにできます。

Zip アーカイブ内の 3 つのエントリのうち 2 番目のエントリを暗号化します。

    using (FileStream zipFile = File.Open(this.resultFile, FileMode.Create))
    {
        FileInfo source1 = new FileInfo("alice29.txt");
        FileInfo source2 = new FileInfo("asyoulik.txt");
        FileInfo source3 = new FileInfo("fields.c");

        using (var archive = new Archive())
        {
            archive.CreateEntry("alice29.txt", source1);
            archive.CreateEntry("asyoulik.txt", source2, false, new ArchiveEntrySettings(null, new AesEcryptionSettings("p@s$", EncryptionMethod.AES256)));
            archive.CreateEntry("fields.c", source3);
            archive.Save(zipFile);
        }
    }

型破りに思えるかもしれませんが、さまざまな暗号化方法とパスワードを使用して ZIP アーカイブ内の特定のエントリを暗号化することは実際に可能です。このアプローチにより、より詳細でカスタマイズされたセキュリティ戦略が可能になり、個々のファイルまたはファイルのグループに個別の保護レベルを設定できます。ただし、この方法では管理と復号化のプロセスが複雑になる可能性があり、さまざまな ZIP アーカイブ ツールとの互換性が異なる可能性があることに注意することが重要です。

さまざまな方法とパスワードで ZIP を暗号化する

    using (FileStream zipFile = File.Open(this.resultFile, FileMode.Create))
    {
        FileInfo source1 = new FileInfo("alice29.txt");
        FileInfo source2 = new FileInfo("asyoulik.txt");
        FileInfo source3 = new FileInfo("fields.c");

        using (var archive = new Archive())
        {
            archive.CreateEntry("alice29.txt", source1, false, new ArchiveEntrySettings(null, new AesEcryptionSettings("p@s$1", EncryptionMethod.AES256)));
            archive.CreateEntry("asyoulik.txt", source2, false, new ArchiveEntrySettings(null, new TraditionalEncryptionSettings("p@s$2")));
            archive.CreateEntry("fields.c", source3, false, new ArchiveEntrySettings(null, new AesEcryptionSettings("p@s$3", EncryptionMethod.AES256)));
            archive.Save(zipFile);
        }
    }

Aspose.ZIP を使用すると、コンテンツを完全に再パックせずに、既存のアーカイブに暗号化を追加できます。ただし、アーカイブのすべてのエントリは保護されていない必要があることに注意することが重要です。それ以外の場合は、例外が発生します。

既存の ZIP アーカイブを暗号化する

    using (var archive = new Archive("plain.zip"))
    {
        archive.Save("encrypted.zip", new ArchiveSaveOptions() 
        { 
            EncryptionOptions = new AesEcryptionSettings("p@s$", EncryptionMethod.AES256)
        });
    }

Zip アーカイブの復号化

ユーザーは、暗号化された ZIP アーカイブ内の特定のエントリを復号化するか、アーカイブ全体を復号化するかを選択できます。

特定のエントリを復号化する

    using (var zipFile = File.Open("archive.zip", FileMode.Create))
    {
        using (var source = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
        {
            var archive = new Archive(new ArchiveEntrySettings(CompressionSettings.Deflate, new TraditionalEncryptionSettings("p@s$")));
            archive.CreateEntry("alice29.txt", source);
            archive.Save(zipFile);
        }
    }

Zip アーカイブ全体を復号化する

この場合、コンストラクター内でパスワードを指定する必要があります。

    using (var zipFile = File.Open("archive.zip", FileMode.Create))
    {
        using (var source = File.Open("alice29.txt", FileMode.Open, FileAccess.Read))
        {
            using (var archive = new Archive(new ArchiveEntrySettings(CompressionSettings.Deflate, new AesEcryptionSettings("p@s$", EncryptionMethod.AES256))))
            {
                archive.CreateEntry("alice29.txt", source);
                archive.Save(zipFile);
            }
        }
    }

RAR アーカイブを暗号化または復号化する方法

RAR アーカイブの復号化

Aspose.ZIP は RAR アーカイブの構成をサポートせず、抽出のみをサポートします。 RAR アーカイブ は、ファイル名を保護してもしなくても暗号化できます。
前者の場合、ユーザーは、RAR アーカイブのインスタンス化の最初に、 RarArchiveLoadOptions 内で復号化パスワードを指定する必要があります。後者の場合、後でエントリを抽出するときにパスワードを渡すことができます。

暗号化されたファイル名を使用して RAR アーカイブ全体を復号化する

    using (RarArchive archive = new RarArchive("source.rar", 
    new RarArchiveLoadOptions() { DecryptionPassword = "p@s$" }))
    {
        archive.ExtractToDirectory("destination");
    }

RAR アーカイブから特定のエントリを復号化する

このサンプルは、エントリの内容のみが暗号化され、ファイル名が暗号化されない場合に機能します。

    using (RarArchive archive = new RarArchive("source.rar"))
    {
        archive.Entries[0].Extract("first_entry.bin", "p@s$");
    }

RAR アーカイブから特定のエントリをストリームとして復号化します

ただし、 このサンプル では、ファイル名ではなく、エントリのコンテンツのみが暗号化されることが前提となっています。 。これには、エントリ バイトをメモリ ストリームにコピーする必要があります。

    MemoryStream destination = new MemoryStream();
    using (RarArchive archive = new RarArchive("source.rar"))
    {
        using (var source = archive.Entries[1].Open("p@s$"))
        {
            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = source.Read(buffer, 0, buffer.Length)) > 0)
            {
                destination.Write(buffer, 0, bytesRead);
            }
        }
    }

7ZIP アーカイブ全体を暗号化または復号化する方法

7z アーカイブ ファイルを暗号化する方法

7z アーカイブ暗号化の唯一のオプションは AES です。

LZMA2 で 7z アーカイブ全体を暗号化して圧縮

7Z アーカイブは、各エントリを独自のパスワードで暗号化するか、保護しないままにする機能をサポートしています。

    using (FileStream szFile = File.Open("archive.7z", FileMode.Create))
    {
        FileInfo source1 = new FileInfo("alice29.txt");
        FileInfo source2 = new FileInfo("asyoulik.txt");	
        FileInfo source3 = new FileInfo("fields.c");

        using (var archive = new SevenZipArchive(new SevenZipEntrySettings(new SevenZipLZMA2CompressionSettings(), new SevenZipAESEncryptionSettings("p@s$"))))
        {
            archive.CreateEntry("alice29.txt", source1);
            archive.CreateEntry("asyoulik.txt", source2);
            archive.CreateEntry("fields.c", source3);
            archive.Save(szFile);
        }
    }

7z アーカイブのエントリを独自のパスワードで暗号化し、1 つのエントリを暗号化しないままにします

ZIP と同様に、ユーザーはアーカイブ全体または特定のエントリを復号化できます。
7Z アーカイブは、ファイル名を保護してもしなくても暗号化できます。ファイル名が暗号化されている場合は、 アーカイブのインスタンス化時に パスワードを指定する必要があります。

    using (FileStream szFile = File.Open("archive.7z", FileMode.Create))
    {
        FileInfo source1 = new FileInfo("alice29.txt");
        FileInfo source2 = new FileInfo("asyoulik.txt");
        FileInfo source3 = new FileInfo("fields.c");

        using (var archive = new SevenZipArchive())
        {
            archive.CreateEntry("alice29.txt", source1);
            archive.CreateEntry("asyoulik.txt", source2, false, new SevenZipEntrySettings(new SevenZipLZMA2CompressionSettings(), new SevenZipAESEncryptionSettings("p@s$")));
            archive.CreateEntry("fields.c", source3, false, new SevenZipEntrySettings(new SevenZipLZMA2CompressionSettings(), new SevenZipAESEncryptionSettings("$ecret")));
            archive.Save(szFile);
        }
    }

暗号化されたファイル名を使用してアーカイブ全体をディレクトリに復号します

ファイル名が暗号化されているかどうかに関係なく、抽出コンストラクター内でパスワードを指定しても安全です。
以下のサンプルは、コンテンツのみが保護されている場合にのみ機能します。

    using (SevenZipArchive archive = new SevenZipArchive("archive.7z", "p@s$")) 
    { 
        archive.ExtractToDirectory("C:\\extracted");
    }

特定のエントリを復号化する

    using (SevenZipArchive archive = new SevenZipArchive("archive.7z"))
    {
        archive.Entries[0].Extract("data.bin", "p@s$");
    }

サポートされているその他の Aspose.ZIP for .NET API 機能

Aspose.ZIP C# ライブラリを使用して、zip ファイル ドキュメントの変換、結合、編集、アーカイブからのデータの抽出などを行います。

  

Support and Learning Resources

  
  

Aspose.Zip offers individual archive processing APIs for other popular development environments, listed below: