アーカイブのパスワード保護

Aspose.ZIP API を使用すると、基礎となるファイル構造を気にせずに、C# または任意の .NET 言語でファイルを圧縮および解凍できます。 この記事では、従来の暗号化スキームと AES 暗号化スキームの両方を使用してパスワード保護を実装する方法の例を示します。さらに、ディレクトリを操作し、混合暗号化技術を使用して複数のファイルを圧縮する方法も示します。

従来の暗号化によるパスワード保護

Aspose.ZIP は、圧縮ファイルに対する従来のパスワード保護を有効にします。単純なパスワードを使用して、アーカイブ内の個々のファイルまたはディレクトリ全体を保護し、許可されたユーザーのみがコンテンツを抽出できるようにすることができます。

従来の暗号化スキームを使用してファイルを暗号化

よりシンプルな従来の暗号化方法を使用してファイルを暗号化します。このアプローチにより、アーカイブの基本的なパスワード保護が可能になり、正しいパスワードを使用してアクセスできる状態を維持しながら、ファイルが安全に圧縮されることが保証されます。

 1    // For complete examples and data files, please go to https://github.com/aspose-zip/Aspose.ZIP-for-.NET
 2    using (FileStream zipFile = File.Open(dataDir + "CompressWithTraditionalEncryption_out.zip", FileMode.Create))
 3    {
 4        using (FileStream source1 = File.Open(dataDir + "alice29.txt", FileMode.Open, FileAccess.Read))
 5        {
 6            var archive = new Archive(new ArchiveEntrySettings(null, new TraditionalEncryptionSettings("p@s$")));
 7            archive.CreateEntry("alice29.txt", source1);
 8            archive.Save(zipFile);
 9        }
10    }

AES 暗号化を使用してファイルを暗号化

Aspose.ZIP for .NET は、アーカイブ内の機密ファイルを保護するのに役立つ暗号化機能を提供します。 API は AES 暗号化をサポートし、さまざまなレベルのセキュリティに対応する複数のキー サイズ (128 ビット、192 ビット、および 256 ビット) を提供します。これらの暗号化方法を使用すると、データが十分に保護され、許可されたユーザーのみがアクセスできるようにすることができます。

AES128 によるファイルの暗号化

Aspose.ZIP for .NET は、アーカイブ内の機密ファイルを保護するのに役立つ暗号化機能を提供します。 API は AES 暗号化をサポートし、さまざまなレベルのセキュリティに対応する複数のキー サイズ (128 ビット、192 ビット、および 256 ビット) を提供します。これらの暗号化方法を使用すると、データが十分に保護され、許可されたユーザーのみがアクセスできるようにすることができます。その方法の例を次に示します。

 1    // For complete examples and data files, please go to https://github.com/aspose-zip/Aspose.ZIP-for-.NET
 2    using (FileStream zipFile = File.Open(dataDir + "PasswordProtectWithAES128_out.zip", FileMode.Create))
 3    {
 4        using (FileStream source1 = File.Open(dataDir + "alice29.txt", FileMode.Open, FileAccess.Read))
 5        {
 6            using (var archive = new Archive(new ArchiveEntrySettings(null, new AesEcryptionSettings("p@s$", EncryptionMethod.AES128))))
 7            {
 8                archive.CreateEntry("alice29.txt", source1);
 9                archive.Save(zipFile);
10            }
11        }
12    }

AES192 によるファイルの暗号化

AES192 暗号化は、AES128 と比較してより高いレベルのセキュリティを提供しますが、暗号化オーバーヘッドがわずかに増加します。この方法は、パフォーマンスをあまり犠牲にすることなく、より強力な保護が必要なシナリオに適しています。 その使用法を理解するには、次の例を確認してください。

 1    // For complete examples and data files, please go to https://github.com/aspose-zip/Aspose.ZIP-for-.NET
 2    using (FileStream zipFile = File.Open(dataDir + "PasswordProtectWithAES192_out.zip", FileMode.Create))
 3    {
 4        using (FileStream source1 = File.Open(dataDir + "alice29.txt", FileMode.Open, FileAccess.Read))
 5        {
 6            using (var archive = new Archive(new ArchiveEntrySettings(null, new AesEcryptionSettings("p@s$", EncryptionMethod.AES192))))
 7            {
 8                archive.CreateEntry("alice29.txt", source1);
 9                archive.Save(zipFile);
10            }
11        }
12    }

AES256 によるファイルの暗号化

AES256 は、AES ファミリで利用可能な最も強力な暗号化オプションであり、最大限のセキュリティを提供します。暗号化と復号化により多くの計算能力が必要な場合でも、最大限のセキュリティが必要とされる機密性の高いデータを保護するのに最適です。以下の例を参照してください。

 1    // For complete examples and data files, please go to https://github.com/aspose-zip/Aspose.ZIP-for-.NET
 2    using (FileStream zipFile = File.Open(dataDir + "PasswordProtectWithAES256_out.zip", FileMode.Create))
 3    {
 4        using (FileStream source1 = File.Open(dataDir + "alice29.txt", FileMode.Open, FileAccess.Read))
 5        {
 6            using (var archive = new Archive(new ArchiveEntrySettings(null, new AesEcryptionSettings("p@s$", EncryptionMethod.AES256))))
 7            {
 8                archive.CreateEntry("alice29.txt", source1);
 9                archive.Save(zipFile);
10            }
11        }
12    }

パスワード保護ディレクトリ

Aspose.ZIP では、個々のファイルを暗号化するだけでなく、ディレクトリ全体をパスワードで保護することもできます。これは、複数のファイルを一度に暗号化し、ディレクトリ内のすべてのコンテンツを単一のパスワードで保護する必要がある場合に特に便利です。

 1// 完全な例とデータ ファイルについては、https://github.com/aspose-zip/Aspose.ZIP-for-.NET にアクセスしてください。
 2using (FileStream zipFile = File.Open(".\\all_corpus_encrypted_out.zip", FileMode.Create))
 3{
 4    DirectoryInfo corpus = new DirectoryInfo(".\\CanterburyCorpus");
 5    using (var archive = new Archive(new ArchiveEntrySettings(null, new TraditionalEncryptionSettings("p@s$"))))
 6    {
 7        archive.CreateEntries(コーパス);
 8        archive.Save(zipFile);
 9    }
10}        

混合暗号化技術を使用して複数のファイルを暗号化API は、同じアーカイブ内での異なる暗号化技術の使用もサポートしています。これにより、機密性やセキュリティ要件に基づいて、AES や従来のパスワード保護などの暗号化アルゴリズムを組み合わせてさまざまなファイルに適用できます。この柔軟性により、アーカイブ内のファイル保護をより詳細に制御できるようになります。この例を見て、実際にどのように機能するかを確認してください。

 1    // For complete examples and data files, please go to https://github.com/aspose-zip/Aspose.ZIP-for-.NET
 2    using (FileStream zipFile = File.Open(dataDir + "CompressWithTraditionalEncryption_out.zip", FileMode.Create))
 3    {
 4        using (FileStream source1 = File.Open(dataDir + "alice29.txt", FileMode.Open, FileAccess.Read))
 5        {
 6            var archive = new Archive(new ArchiveEntrySettings(null, new TraditionalEncryptionSettings("p@s$")));
 7            archive.CreateEntry("alice29.txt", source1);
 8            archive.Save(zipFile);
 9        }
10    }

パスワードで保護されたファイルの解凍

アーカイブを暗号化した後、必要に応じてファイルを復号化して抽出する方法も知っておく必要があります。 Aspose.ZIP は、従来の暗号化が使用されたか AES 暗号化が使用されたかに関係なく、パスワードで保護されたアーカイブの解凍を簡素化します。ファイルを個別に抽出することも、暗号化されたディレクトリ全体を解凍することもできます。

従来のパスワードで保護されたアーカイブの解凍

従来のパスワードで保護されているファイルを簡単に抽出できます。この方法では、古い暗号化技術を使用して保護されたアーカイブが処理され、正しいパスワードが提供されるとデータへのアクセスが保証されます。

 1    // For complete examples and data files, please go to https://github.com/aspose-zip/Aspose.ZIP-for-.NET
 2    using (FileStream fs = File.OpenRead(dataDir + "CompressWithTraditionalEncryption_out.zip"))
 3    {
 4        using (var extracted = File.Create(dataDir + "alice_extracted_out.txt"))
 5        {
 6            using (Archive archive = new Archive(fs, new ArchiveLoadOptions() { DecryptionPassword = "p@s$" }))
 7            {
 8                using (var decompressed = archive.Entries[0].Open())
 9                {
10                    byte[] b = new byte[8192];
11                    int bytesRead;
12                    while (0 < (bytesRead = decompressed.Read(b, 0, b.Length)))
13                    {
14                        extracted.Write(b, 0, bytesRead);
15                    }
16                }
17            }
18        }
19    }

AES 暗号化アーカイブを解凍します

このセクションでは、最も安全な暗号化標準の 1 つである AES を使用して暗号化されたファイルを抽出する方法について説明します。 AES128、AES192、または AES256 のいずれを扱う場合でも、正しい復号化キーが提供されていれば、抽出プロセスは簡単です。

 1    // For complete examples and data files, please go to https://github.com/aspose-zip/Aspose.ZIP-for-.NET
 2    using (FileStream fs = File.OpenRead(dataDir + "PasswordProtectWithAES256_out.zip"))
 3    {
 4        using (var extracted = File.Create(dataDir + "alice_aesextracted_out.txt"))
 5        {
 6            using (Archive archive = new Archive(fs))
 7            {
 8                using (var decompressed = archive.Entries[0].Open("p@s$"))
 9                {
10                    byte[] b = new byte[8192];
11                    int bytesRead;
12                    while (0 < (bytesRead = decompressed.Read(b, 0, b.Length)))
13                    {
14                        extracted.Write(b, 0, bytesRead);
15                    }
16                }
17            }
18        }
19    }

AES 暗号化された保存されたアーカイブを解凍します

暗号化され、圧縮せずに保存されたアーカイブからファイルを抽出します。このプロセスにより、圧縮されていないファイルでも安全な状態が保たれ、元のファイル構造を維持しながら機密データが保護されます。

 1    // For complete examples and data files, please go to https://github.com/aspose-zip/Aspose.ZIP-for-.NET
 2    using (FileStream fs = File.OpenRead(dataDir + "StoreMutlipleFilesWithoutCompressionWithPassword_out.zip"))
 3    {
 4        using (var extracted = File.Create(dataDir + "alice_aesextracted_out.txt"))
 5        {
 6            using (Archive archive = new Archive(fs, new ArchiveLoadOptions() { DecryptionPassword = "p@s$" }))
 7            {
 8                using (var decompressed = archive.Entries[0].Open())
 9                {
10                    byte[] b = new byte[8192];
11                    int bytesRead;
12                    while (0 < (bytesRead = decompressed.Read(b, 0, b.Length)))
13                    {
14                        extracted.Write(b, 0, bytesRead);
15                    }
16                }
17            }
18        }
19    }

暗号化されたフォルダーをディレクトリに解凍します

暗号化されたディレクトリ全体を元のフォルダー構造に抽出します。このプロセスでは、正しい復号キーが使用されていれば、元の階層とセキュリティを維持しながら、暗号化されたアーカイブからすべてのファイルが指定されたディレクトリに復元されます。

1    // For complete examples and data files, please go to https://github.com/aspose-zip/Aspose.ZIP-for-.NET
2    using (FileStream zipFile = File.Open(".\\all_corpus_encrypted.zip", FileMode.Open))
3    {
4        new Archive(zipFile, new ArchiveLoadOptions() { DecryptionPassword = "p@s$" }).ExtractToDirectory(".\\all_corpus_decrypted");
5    }

アーカイブの解凍

Aspose.ZIP for .NET は、単一のファイル、複数のファイル、または圧縮されていない保存されたファイルを含むアーカイブを解凍するための使いやすい API を提供します。このセクションでは、さまざまな解凍シナリオを示し、圧縮データを抽出するための効率的なソリューションを提供します。

単一ファイルを含むアーカイブを解凍します

アーカイブにファイルが 1 つだけ含まれているシナリオでは、解凍は簡単です。次の例を使用すると、最小限のオーバーヘッドでアーカイブのコンテンツを迅速に抽出し、元のデータの整合性を確保できます。

 1    // For complete examples and data files, please go to https://github.com/aspose-zip/Aspose.ZIP-for-.NET
 2    using (FileStream fs = File.OpenRead(dataDir + "CompressSingleFile_out.zip"))
 3    {
 4        using (Archive archive = new Archive(fs))
 5        {
 6            int percentReady = 0;
 7            archive.Entries[0].ExtractionProgressed += (s, e) =>
 8            {
 9                int percent = (int)((100 * e.ProceededBytes) / ((ArchiveEntry)s).UncompressedSize);
10                if (percent > percentReady)
11                {
12                    Console.WriteLine(string.Format("{0}% decompressed", percent));
13                    percentReady = percent;
14                }
15            };
16            archive.Entries[0].Extract(dataDir + "alice_extracted_out.txt");
17        }
18    }

複数のファイルを含むアーカイブを解凍します

複数のファイルを含むアーカイブを操作する場合、API はエントリを反復処理してそれらを効率的に抽出するプロセスを簡素化します。抽出中のイベントベースの進行状況追跡は、大規模な解凍タスクを監視する場合に特に役立ちます。

 1    // For complete examples and data files, please go to https://github.com/aspose-zip/Aspose.ZIP-for-.NET
 2    using (FileStream zipFile = File.Open(dataDir + "CompressMultipleFiles_out.zip", FileMode.Open))
 3    {
 4        StringBuilder sb = new StringBuilder("Entries are: ");
 5        int percentReady = 0;
 6        using (Archive archive = new Archive(zipFile,
 7            new ArchiveLoadOptions()
 8            {
 9                EntryListed = (s, e) => { sb.AppendFormat("{0}, ", e.Entry.Name); },
10                EntryExtractionProgressed = (s, e) =>
11                {
12                    int percent = (int)((100 * e.ProceededBytes) / ((ArchiveEntry)s).UncompressedSize);
13                    if (percent > percentReady)
14                    {
15                        Console.WriteLine(string.Format("{0}% compressed", percent)); percentReady = percent;
16                    }
17                }
18            }))
19        {
20            Console.WriteLine(sb.ToString(0, sb.Length - 2));
21            using (var extracted = File.Create(dataDir + "alice_extracted_out.txt"))
22            {
23                using (var decompressed = archive.Entries[0].Open())
24                {
25                    byte[] buffer = new byte[8192];
26                    int bytesRead;
27                    while (0 < (bytesRead = decompressed.Read(buffer, 0, buffer.Length)))
28                    {
29                        extracted.Write(buffer, 0, bytesRead);
30                    }
31                    // Read from decompressed stream to extracting file.
32                }
33            }
34            percentReady = 0;
35            archive.Entries[1].Extract(dataDir + "asyoulik_extracted_out.txt");
36        }
37    }

保存されたアーカイブを圧縮せずに抽出します

圧縮されていないファイルを含む保存されたアーカイブも、Aspose.Zip API でサポートされています。これらのアーカイブはファイル サイズを削減しませんが、保存されているデータに迅速にアクセスし、効率的に抽出することができます。これは、ファイルの構造を変更せずにファイルをパッケージ化する必要がある場合に便利です。

 1    // For complete examples and data files, please go to https://github.com/aspose-zip/Aspose.ZIP-for-.NET
 2    using (FileStream zipFile = File.Open(dataDir + "StoreMultipleFilesWithoutCompression_out.zip", FileMode.Open))
 3    {
 4        using (Archive archive = new Archive(zipFile))
 5        {
 6            using (var extracted = File.Create(dataDir + "alice_extracted_store_out.txt"))
 7            {
 8                using (var decompressed = archive.Entries[0].Open())
 9                {
10                    byte[] buffer = new byte[8192];
11                    int bytesRead;
12                    while (0 < (bytesRead = decompressed.Read(buffer, 0, buffer.Length)))
13                    {
14                        extracted.Write(buffer, 0, bytesRead);
15                    }
16                    // Read from decompressed stream to extracting file.
17                }
18            }
19
20            using (var extracted = File.Create(dataDir + "asyoulik_extracted_store_out.txt"))
21            {
22                using (var decompressed = archive.Entries[1].Open())
23                {
24                    byte[] buffer = new byte[8192];
25                    int bytesRead;
26                    while (0 < (bytesRead = decompressed.Read(buffer, 0, buffer.Length)))
27                    {
28                        extracted.Write(buffer, 0, bytesRead);
29                    }
30                    // Read from decompressed stream to extracting file.
31                }
32            }
33        }
34    }

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.