[java] Jansi를 활용하여 자바에서 터미널에서 파일 암호화하기

이번에는 Jansi 라이브러리를 활용하여 자바에서 터미널에서 파일을 암호화하는 방법에 대해 알아보겠습니다.

Jansi는 자바에서 ANSI 이스케이프 시퀀스를 처리할 수 있는 라이브러리입니다. 이를 사용하여 터미널에서 암호화된 파일을 출력하는 기능을 구현할 수 있습니다.

1. Jansi 라이브러리 추가

먼저, Maven 또는 Gradle을 사용하여 Jansi 라이브러리를 프로젝트에 추가해야 합니다. Maven을 사용한다면 pom.xml 파일에 다음과 같이 의존성을 추가합니다.

<dependencies>
    <dependency>
        <groupId>org.fusesource.jansi</groupId>
        <artifactId>jansi</artifactId>
        <version>1.18</version>
    </dependency>
</dependencies>

Gradle을 사용한다면 build.gradle 파일에 다음과 같이 의존성을 추가합니다.

dependencies {
    implementation 'org.fusesource.jansi:jansi:1.18'
}

의존성을 추가한 후, 프로젝트를 빌드해 필요한 라이브러리를 다운로드합니다.

2. 파일 암호화 기능 구현

이제 실제로 파일을 암호화하는 기능을 구현해보겠습니다. 아래 예제 코드를 참고하여 자신의 요구에 맞게 구현해보세요.

import org.fusesource.jansi.AnsiConsole;

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

public class FileEncrypter {

    public static void main(String[] args) {
        if (args.length != 2) {
            System.out.println("Usage: FileEncrypter <inputFile> <outputFile>");
            return;
        }

        String inputFile = args[0];
        String outputFile = args[1];

        try {
            encryptFile(inputFile, outputFile);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static void encryptFile(String inputFile, String outputFile) throws IOException {
        AnsiConsole.systemInstall();
        
        File input = new File(inputFile);
        File output = new File(outputFile);
        
        FileInputStream fis = new FileInputStream(input);
        FileOutputStream fos = new FileOutputStream(output);
        
        byte[] buffer = new byte[1024];
        int bytesRead;
        
        while ((bytesRead = fis.read(buffer)) != -1) {
            for (int i = 0; i < bytesRead; i++) {
                buffer[i] = (byte) (buffer[i] ^ 0xFF); // XOR 암호화
            }
            
            AnsiConsole.out.write(buffer, 0, bytesRead);
            fos.write(buffer, 0, bytesRead);
        }
        
        fis.close();
        fos.close();

        AnsiConsole.systemUninstall();
    }
}

위 코드는 FileEncrypter 클래스를 통해 파일을 암호화하는 동작을 수행합니다. 프로그램을 실행할 때 명령줄 인수로 암호화할 파일 경로와 출력 파일 경로를 지정해야 합니다.

암호화는 XOR 암호화 방식을 사용하며, Jansi의 AnsiConsole을 사용하여 터미널에 암호화된 파일을 출력합니다. 또한, FileInputStreamFileOutputStream을 사용하여 파일을 읽고 쓸 수 있습니다.

3. 실행 및 결과 확인

프로그램을 실행하여 파일을 암호화한 후 결과를 확인해보겠습니다. 명령 프롬프트 또는 터미널에서 다음과 같이 입력합니다.

java FileEncrypter input.txt output.txt

위 명령을 실행하면 input.txt 파일의 내용이 암호화되어 output.txt 파일에 출력됩니다. 암호화된 파일은 터미널에서 확인할 수 있으며, 일반 텍스트로는 읽을 수 없습니다.

결론

이번에는 Jansi를 활용하여 자바에서 터미널에서 파일을 암호화하는 방법에 대해 알아보았습니다. Jansi는 ANSI 이스케이프 시퀀스를 처리할 수 있어 터미널에서 다양한 기능을 구현할 때 유용하게 사용될 수 있습니다.

더 많은 기능에 대해서는 Jansi의 공식 문서나 예제 코드를 참고해보시기 바랍니다.

참고 자료: