개요

Aspose.ZIP은 아카이브의 암호화 및 암호 해독과 관련된 다양한 작업을 용이하게 합니다. Java용 Aspose.Zip API를 사용하면 ZIP, RAR, 7-Zip 아카이브를 빠르게 암호화하고 해독할 수 있습니다.

ZIP 파일 암호화/복호화

ZIP 아카이브 에 사용할 수 있는 암호화 방법에는 두 가지가 있습니다. 현재 약하다고 간주되는 기존 방법과 최신 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 알고리즘으로 데이터를 암호화합니다.
이 샘플의 경우 해당 Archive 생성자 . 다른 항목은 보호되지 않은 상태로 두고 특정 항목에 대해 암호화를 적용할 수 있습니다.

ZIP 암호화 알고리즘을 사용하여 3개의 항목 중 두 번째 항목을 암호화합니다.

    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"의 세 가지 입력 파일을 사용하여 ZIP 아카이브를 생성하는 방법을 보여줍니다. 고유하게 첫 번째 파일과 마지막 파일은 암호화되지 않은 상태로 추가되는 반면, 두 번째 파일인 ‘asyoulik.txt’는 비밀번호 ‘p@s$S’와 AES-256 암호화를 사용하여 비밀번호로 보호됩니다.
이러한 선택적 암호화 접근 방식은 ZIP 아카이브 내의 파일은 일반적이지 않습니다. 그러나 Java용 Aspose.Zip API는 다양한 암호화 방법과 비밀번호를 사용하여 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"의 세 가지 암호화된 파일을 포함하는 ZIP 아카이브를 생성합니다. 각 파일은 고유한 방법으로 암호화됩니다.
첫 번째 부분은 이전 코드 예제의 기능을 반영합니다. 핵심 섹션은 각 파일의 아카이브 내에 항목을 만드는 데 중점을 둡니다. 이러한 항목은 해당 이름과 소스 파일(파일 개체)을 참조합니다. 암호화는 다양한 방법으로 적용됩니다.

  • "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 아카이브는 파일 이름을 보호할지 여부를 선택하여 암호화할 수 있습니다.
이전 시나리오에서 사용자는 초기화 시 RarArchiveLoadOptions 개체 내에 암호 해독 비밀번호를 제공해야 합니다. 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 메소드를 사용하여 아카이브에 대한 암호 해독 비밀번호를 설정합니다.
  • 암호화된 아카이브 열기: 다음 줄은 읽기 및 편집을 위해 "source.rar" 아카이브를 엽니다. 리소스를 사용해 시도 구성. 암호화된 아카이브를 처리하기 위해 복호화 비밀번호와 함께 옵션 객체를 지정합니다.
  • 아카이브 내용 추출: 마지막으로 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 블록 내에서는 두 번째 항목에 대한 입력 스트림을 검색하고 비밀번호 "p@s$S"를 사용하여 이를 해독합니다.
  • 암호화 및 스트리밍: 해독된 바이트 버퍼를 사용하여 입력 스트림에서 청크로 읽혀집니다. 그런 다음 각 청크는 모든 데이터가 처리될 때까지 대상 ByteArrayOutputStream에 기록됩니다.
  • 오류 처리: 코드는 처리할 catch 블록을 통합합니다. 암호 해독 또는 스트리밍 프로세스 중에 발생할 수 있는 잠재적인 IOException. 오류가 발생하면 디버깅 목적으로 오류 메시지가 표준 오류 스트림에 인쇄됩니다.

Java를 사용하여 7-ZIP 파일 암호화 및 해독

Java 24.4 버전의 경우 Aspose.ZIP으로 구현됩니다. 유일한 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" 파일에 대해 세 개의 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"의 세 가지 파일을 포함하는 7z 아카이브를 생성합니다. 후자의 두 파일은 서로 다른 비밀번호를 사용하여 압축 및 암호화됩니다.
이전 코드와 달리 archive.CreateEntry 메소드는 아카이브 객체에서 각 파일에 대한 항목을 생성하는 데 사용됩니다. source2 FileInfo 개체에서 "asyoulik.txt"에 대한 항목을 생성할 때 CreateEntry의 세 번째 매개변수가 false로 설정됩니다. 이는 네 번째 매개변수(SevenZipEntrySettings 개체)에 정의된 사용자 지정 압축 및 암호화 설정이 사용됨을 나타냅니다. 이 경우 설정에서는 비밀번호 "p@s$S"를 사용하여 "Zip LZMA2" 압축 및 "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" 폴더에 추출합니다.
파일 이름이 암호화되어 있는지 여부에 관계없이 추출 생성자에 비밀번호를 제공하는 것이 안전합니다. 아래 샘플은 콘텐츠만 보호되는 경우에만 작동합니다.

  

Support and Learning Resources

  
  

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