[java] 자바에서 파일을 ZIP으로 압축할 때 암호화하기

이 블로그 포스트에서는 Java에서 파일을 ZIP으로 압축하고, 해당 ZIP 파일을 암호화하는 방법에 대해 알아보겠습니다.

1. 라이브러리 추가

먼저, Java에서 ZIP 파일을 다루기 위해 java.util.zip 패키지를 사용할 수 있습니다. 또한, ZIP 파일을 암호화하기 위해서는 org.apache.commons.compress 라이브러리를 사용할 수 있습니다. Maven을 사용하는 경우, 다음과 같이 의존성을 추가할 수 있습니다:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-compress</artifactId>
    <version>1.21</version>
</dependency>

Gradle을 사용하는 경우, 다음과 같이 의존성을 추가할 수 있습니다:

implementation 'org.apache.commons:commons-compress:1.21'

2. 파일을 ZIP으로 압축하기

다음은 Java에서 파일을 ZIP으로 압축하는 코드 예제입니다.

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class ZipExample {
    public static void main(String[] args) {
        File fileToZip = new File("example.txt");
        try (FileOutputStream fos = new FileOutputStream("example.zip");
             ZipOutputStream zos = new ZipOutputStream(fos)) {
            FileInputStream fis = new FileInputStream(fileToZip);
            ZipEntry zipEntry = new ZipEntry(fileToZip.getName());
            zos.putNextEntry(zipEntry);
            byte[] bytes = new byte[1024];
            int length;
            while ((length = fis.read(bytes)) >= 0) {
                zos.write(bytes, 0, length);
            }
            zos.closeEntry();
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3. ZIP 파일을 암호화하기

org.apache.commons.compress 라이브러리를 사용하여 ZIP 파일을 암호화하는 방법은 다음과 같습니다.

import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
import org.apache.commons.compress.utils.IOUtils;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class EncryptZipExample {
    public static void main(String[] args) {
        String sourceFile = "example.txt";
        String zipFilePath = "example.zip";
        String password = "password";
        try (FileOutputStream fos = new FileOutputStream(zipFilePath);
             ZipArchiveOutputStream zipOut = new ZipArchiveOutputStream(fos)) {
            zipOut.setMethod(ZipArchiveOutputStream.LZMA_ENCRYPTION);
            byte[] buffer = new byte[1024];
            File file = new File(sourceFile);
            zipOut.putArchiveEntry(new ZipArchiveEntry(file, file.getName()));
            FileInputStream fis = new FileInputStream(file);
            int length;
            while ((length = fis.read(buffer)) >= 0) {
                zipOut.write(buffer, 0, length);
            }
            zipOut.closeArchiveEntry();
            zipOut.close();
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

위의 예제 코드에서는 ZipArchiveOutputStream 클래스를 사용하여 ZIP 파일을 암호화하였습니다. zipOut.setMethod(ZipArchiveOutputStream.LZMA_ENCRYPTION)을 통해 LZMA 알고리즘을 사용하여 암호화하였습니다.

마무리

이제, Java를 사용하여 파일을 ZIP으로 압축하고 해당 ZIP 파일을 암호화하는 방법에 대해 간략하게 알아보았습니다. 필요에 따라 코드를 수정하여 프로젝트에 적용해 보시기 바랍니다.

참고 자료

관련 포스트: Java에서 파일을 ZIP으로 압축하기


주의: 위의 코드는 예시일 뿐 실제 환경에 맞게 적절히 수정해야 합니다.