概要

Aspose.ZIP は、アーカイブの暗号化と復号化に関連するさまざまな操作を容易にします。 Aspose.Zip API for Java を使用すると、ZIP、RAR、7-Zip アーカイブをすばやく暗号化および復号化できます。

ZIPファイルの暗号化/復号化

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

Deflate メソッドを使用して ZIP を暗号化する

    try (FileOutputStream zipFile = new FileOutputStream("archive.zip")) {
        try (FileInputStream source = new FileInputStream("alice29.txt")) {
            Archive archive = new Archive(new ArchiveEntrySettings(CompressionSettings.getDeflate(), new TraditionalEncryptionSettings("p@s$S")));
            archive.createEntry("alice29.txt", source);
            archive.save(zipFile);
        }
    } catch (IOException ex) {
        System.err.println(ex.getMessage());
    }

このコードは、Deflate 圧縮方法と従来の ZIP 暗号化を使用して、「archive.zip」という名前の ZIP アーカイブを作成します。これは、最初に try FileOutputStream を使用してアーカイブの新しい出力ストリームを開くことによって実現されます。 FileInputStream ソースは、アーカイブに追加されるソース ファイル「alice29.txt」の入力ストリームとして機能します。次に、Deflate 圧縮方法と従来の暗号化の両方を指定して、Archive オブジェクトが作成されます。暗号化用のパスワードは「p@s$S」に設定されています。 catch ステートメントは、ファイルまたはアーカイブの操作中に発生する可能性のある例外を処理し、エラー メッセージをコンソールに出力します。

AES方式でZIPを暗号化する

    try (FileOutputStream zipFile = new FileOutputStream("archive.zip")) {
        try (FileInputStream source = new FileInputStream("alice29.txt")) {
            try (Archive archive = new Archive(new ArchiveEntrySettings(CompressionSettings.getDeflate(), new AesEncryptionSettings("p@s$S", EncryptionMethod.AES256)))) {
                archive.createEntry("alice29.txt", source);
                archive.save(zipFile);
            }
        }
    } catch (IOException ex) {
        System.err.println(ex.getMessage());
    }

このコードは、Deflate 圧縮方法を使用して「archive.zip」という名前の ZIP アーカイブを作成し、強力な AES-256 アルゴリズムでデータを暗号化します。
これらのサンプルでは、​​対応する アーカイブ コンストラクター 。特定のエントリに暗号化を適用し、他のエントリを保護しないままにすることが可能です。

ZIP 暗号化アルゴリズムを使用して、3 つのエントリのうち 2 番目のエントリを暗号化します。

    try (FileOutputStream zipFile = new FileOutputStream("archive.zip")) {
        File source1 = new File("alice29.txt");
        File source2 = new File("asyoulik.txt");
        File source3 = new File("fields.c");

        try (Archive archive = new Archive()) {
            archive.createEntry("alice29.txt", source1);
            archive.createEntry("asyoulik.txt", source2, false, new ArchiveEntrySettings(null, new AesEncryptionSettings("p@s$S", EncryptionMethod.AES256)));
            archive.createEntry("fields.c", source3);
            archive.save(zipFile);
        }
    } catch (IOException ex) {
        System.err.println(ex.getMessage());
    }

このコードは、「alice29.txt」、「asyoulik.txt」、および「fields.c」の 3 つの入力ファイルを含む ZIP アーカイブを作成する方法を示しています。独特な点として、最初と最後のファイルは暗号化されずに追加されますが、2 番目のファイル「asyoulik.txt」は、パスワード「p@s$S」による AES-256 暗号化を使用してパスワード保護されています。
この選択的に暗号化するアプローチは、 ZIP アーカイブ内のファイルは一般的ではありません。ただし、Aspose.Zip API for Java は、さまざまな暗号化方法とパスワードを使用して ZIP アーカイブ内の特定のエントリを暗号化する機能を提供します。これによりデータのセキュリティは強化されますが、アーカイブ管理と復号化のプロセスが複雑になります。

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

    try (FileOutputStream zipFile = new FileOutputStream("archive.zip")) {
        File source1 = new File("alice29.txt");
        File source2 = new File("asyoulik.txt");
        File source3 = new File("fields.c");

        try (Archive archive = new Archive()) {
            archive.createEntry("alice29.txt", source1, false, new ArchiveEntrySettings(null, new AesEncryptionSettings("p@s$S", EncryptionMethod.AES256)));
            archive.createEntry("asyoulik.txt", source2, false, new ArchiveEntrySettings(null, new TraditionalEncryptionSettings("p@s$D")));
            archive.createEntry("fields.c", source3, false, new ArchiveEntrySettings(null, new AesEncryptionSettings("p@s$F", EncryptionMethod.AES256)));
            archive.save(zipFile);
        }
    } catch (IOException ex) {
        System.err.println(ex.getMessage());
    }

このコードは、「alice29.txt」、「asyoulik.txt」、および「fields.c」の 3 つの暗号化ファイルを含む ZIP アーカイブを作成します。各ファイルは個別の方法で暗号化されます。
最初の部分は、前のコード例の機能を反映しています。コアセクションでは、アーカイブ内に各ファイルのエントリを作成することに重点を置いています。これらのエントリは、その名前とソース ファイル (File オブジェクト) を参照します。暗号化はさまざまな方法で適用されます。

  • “alice29.txt” : パスワード “p@s$S” による AES-256 暗号化
  • “asyoulik.txt” : 従来型パスワード「p@s$D」による暗号化方式
  • 「fields.c」: パスワード「p@s$F」による AES-256 暗号化
最後の部分アーカイブを保存し、プロセス中に問題が発生した場合に通知するエラー処理を組み込みます。

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

    try (Archive archive = new Archive("plain.zip")) {
        ArchiveSaveOptions options = new ArchiveSaveOptions();
        options.setEncryptionOptions(new AesEncryptionSettings("p@s$S", EncryptionMethod.AES256));
        archive.save("encrypted.zip", options);
    }

このコードは、既存の「plain.zip」アーカイブを取得し、パスワード「p@s$S」を使用して AES 暗号化を適用し、「encrypted.zip」という名前の新しいアーカイブとして保存します。

ZIPファイルをパスワードで復号化する

    try (Archive archive = new Archive("source.zip")) {
        archive.getEntries().get(0).extract("first_entry.bin", "p@s$S");
    }

このコードは、「source.zip」アーカイブから最初のエントリを抽出し、パスワード「p@s$S」を使用して「first_entry.bin」という名前のファイルとして保存します。
ユーザーは、暗号化された ZIP アーカイブ内の特定のエントリを復号化するか、アーカイブ全体を復号化するかを選択できます。

ZIPファイル全体を復号化する

    ArchiveLoadOptions options = new ArchiveLoadOptions();
    options.setDecryptionPassword("p@s$S");
    try (Archive archive = new Archive("source.zip", options)) {
        archive.extractToDirectory("destination");
    }

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

JavaでRARファイルを暗号化/復号化する

Aspose.ZIP は、 RAR アーカイブ を作成する機能を提供しません。抽出のみをサポートします。 RAR アーカイブは、ファイル名を保護するかどうかのオプションを使用して暗号化できます。
前者のシナリオでは、ユーザーは、 RAR アーカイブ。後者の場合、個々のエントリの抽出中にパスワードを指定できます。

暗号化されたファイル名を持つ RAR ファイルを復号化する

    RarArchiveLoadOptions options = new RarArchiveLoadOptions();
    options.setDecryptionPassword("p@s$S");
    try (RarArchive archive = new RarArchive("source.rar", options)) {
        archive.extractToDirectory("destination");
    }

このコードは、「source.rar」アーカイブの内容を復号化し、「destination」フォルダーに抽出します。アーカイブが暗号化されている場合、指定された復号化パスワードが使用されます。
仕組みの詳細は次のとおりです:

  • 復号化パスワードを使用した設定のロード: まず、アーカイブのロード設定オブジェクトを作成します。 RarArchiveLoadOptions オプション演算子を使用した RAR アーカイブ。次に、options.setDecryptionPassword メソッドを使用してアーカイブの復号化パスワードを設定します。
  • 暗号化アーカイブを開く: 次の行は、 try-with-resources 構造。暗号化されたアーカイブを処理するための復号化パスワードを含むオプション オブジェクトを指定します。
  • アーカイブの内容の抽出: 最後に、archive.extractToDirectory メソッドは、復号化されたアーカイブのコンテンツを「宛先」に抽出します。フォルダ。

ターゲットを絞った復号化 RAR ファイル

    try (RarArchive archive = new RarArchive("source.rar")) {
        archive.getEntries().get(0).extract("first_entry.bin", "p@s$S");
    }

このコード スニペットは、アーカイブが暗号化されている場合は、復号化パスワード「p@s$S」を使用して、「source.rar」RAR アーカイブから最初のエントリを抽出し、「first_entry.bin」として保存しようとします。

特定の RAR エントリ コンテンツ (ストリーム) の復号化

    ByteArrayOutputStream destination = new ByteArrayOutputStream();
    try (RarArchive archive = new RarArchive("source.rar")) {
        try (InputStream source = archive.getEntries().get(1).open("p@s$S")) {
            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = source.read(buffer, 0, buffer.length)) > 0) {
                destination.write(buffer, 0, bytesRead);
            }
        } catch (IOException ex) {
            System.err.println(ex.getMessage());
        }
    }

このコード スニペットは、RAR アーカイブ内の特定のエントリをターゲットとしています。ファイル名自体ではなく、エントリ データのみが暗号化されると想定して、エントリのコンテンツを復号化し、メモリに直接ストリーミングします。
コードの動作の完全な説明:

  • メモリ バッファの初期化 : ByteArrayOutputStream という名前の宛先が、ターゲット エントリの復号化されたコンテンツを保存するためのメモリ内バッファとして機能するために作成されます。
  • アーカイブとエントリ アクセス: コードは try-with を利用します。 -resources ブロックでソース RAR アーカイブ「source.rar」を開きます。別の try-with-resources ブロック内で、2 番目のエントリの入力ストリームを取得し、パスワード「p@s$S」を使用して復号化します。
  • 復号化とストリーミング: 復号化されたバイトバッファを使用して、入力ストリームからチャンク単位で読み取られます。その後、すべてのデータが処理されるまで、各チャンクが宛先 ByteArrayOutputStream に書き込まれます。
  • エラー処理: コードには、処理するための catch ブロックが組み込まれています。復号化またはストリーミング プロセス中に発生する可能性のある潜在的な IOException。エラーが発生した場合、デバッグ目的でエラー メッセージが標準エラー ストリームに出力されます。

Java を使用した 7-ZIP ファイルの暗号化と復号化

Aspose.ZIP for Java 24.4 バージョンで実装されます。 7z アーカイブ暗号化オプションは AES のみです。

LZMA2 で 7-Zip ファイルを暗号化して圧縮する

    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$S"))))
        {
            archive.CreateEntry("alice29.txt", source1);
            archive.CreateEntry("asyoulik.txt", source2);
            archive.CreateEntry("fields.c", source3);
            archive.Save(szFile);
        }
    }

7Z アーカイブは、各エントリを独自のパスワードで暗号化するか、保護しないままにする機能をサポートしています。このコードは、LZMA2 および AES 圧縮と暗号化を使用して新しい 7z アーカイブを作成します。

  • ファイルを開く: FileStream は、作成モードで「archive.7z」という名前の新しいファイルを開くために使用されます。
  • オブジェクトの初期化: ファイル “alice29.txt”、“asyoulik.txt”、および “fields.c” に対して 3 つの FileInfo オブジェクトが作成されます。
  • 7-zip ファイルの作成: SevenZipArchive オブジェクトは次の条件で作成されます:
    - LZMA2 圧縮設定。
    - パスワード「p@s$S」を使用した AES 暗号化 設定
  • ファイルの追加: CreateEntry メソッドは、各ファイルを個別のファイルからアーカイブに追加するために使用されます。ソース。
  • アーカイブの保存: アーカイブは、Save メソッドを使用して szFile ファイル ストリームに保存されます。

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$S")));
            archive.CreateEntry("fields.c", source3, false, new SevenZipEntrySettings(new SevenZipLZMA2CompressionSettings(), new SevenZipAESEncryptionSettings("$ecret")));
            archive.Save(szFile);
        }
    }

このコードは、「alice29.txt」、「asyoulik.txt」、および「fields.c」の 3 つのファイルを含む 7z アーカイブを作成します。後の 2 つのファイルは、異なるパスワードを使用して圧縮および暗号化されます。
前のコードとは異なり、アーカイブ オブジェクトで archive.CreateEntry メソッドを使用して、各ファイルのエントリを作成します。 source2 FileInfo オブジェクトから「asyoulik.txt」のエントリを作成するとき、CreateEntry の 3 番目のパラメーターは false に設定されます。これは、4 番目のパラメーター (SevenZipEntrySettings オブジェクト) で定義されたカスタムの圧縮および暗号化設定が使用されることを示します。この例では、設定では「Zip LZMA2」圧縮とパスワード「p@s$S」による「Zip AES」暗号化が指定されています。
ZIP と同様に、ユーザーはアーカイブ全体またはアーカイブ内の特定のエントリを復号化できます。
7Z アーカイブ は、保護の有無にかかわらず暗号化できます。ファイル名。ファイル名が暗号化されている場合は、パスワードを指定する必要があります アーカイブのインスタンス化時に

暗号化されたファイル名を使用した 7z 復号化

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

このコードは、try-with-resources ブロックを利用して、パスワード「p@s$S」で保護された「archive.7z」という名前の 7z アーカイブを開きます。次に、アーカイブの内容を「C:\extracted」フォルダーに抽出します。
ファイル名が暗号化されているかどうかに関係なく、抽出コンストラクター内でパスワードを指定しても安全です。以下のサンプルは、コンテンツのみが保護されている場合にのみ機能します。

7z 固有のエントリの復号化

    try (SevenZipArchive archive = new SevenZipArchive("archive.7z")) {
        archive.getEntries().get(0).extract("data.bin", "p@s$S");
    }

このコードは、try-with-resources ブロックを利用して、パスワード「p@s$S」で保護された「archive.7z」という名前の 7z アーカイブを開きます。次に、アーカイブの内容を「C:\extracted」フォルダーに抽出します。
ファイル名が暗号化されているかどうかに関係なく、抽出コンストラクター内でパスワードを指定しても安全です。以下のサンプルは、コンテンツのみが保護されている場合にのみ機能します。

その他のサポートされている Java 圧縮 API

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

  

Support and Learning Resources

  
  

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