[파이썬] shutil로 파일 또는 디렉토리 암호화하기

파일이나 디렉토리를 암호화하는 것은 개인 또는 기업의 중요한 데이터를 안전하게 보호하는 데 중요한 역할을 합니다. 이번 포스트에서는 shutil 라이브러리를 사용하여 파일 또는 디렉토리를 암호화하는 방법에 대해 알아보겠습니다.

암호화 함수 구현하기

먼저, shutil 라이브러리를 사용하기 전에 암호화 함수를 구현해야 합니다. 이 함수는 사용자로부터 입력받은 비밀번호를 사용하여 파일이나 디렉토리를 암호화하고, 암호화된 결과를 반환해야 합니다. 아래는 예시로 작성한 암호화 함수입니다.

import hashlib

def encrypt(path, password):
    # 비밀번호를 해싱하여 암호키 생성
    key = hashlib.sha256(password.encode()).digest()

    with open(path, 'rb') as file:
        data = file.read()
    
    # XOR 연산을 통해 데이터 암호화
    encrypted_data = bytes([data_byte ^ key_byte for data_byte, key_byte in zip(data, key)])

    return encrypted_data

파일 암호화하기

이제 위에서 구현한 암호화 함수를 사용하여 파일을 암호화하는 방법을 알아보겠습니다.

import shutil

def encrypt_file(input_file, output_file, password):
    # 파일을 암호화하여 암호화된 데이터를 얻습니다.
    encrypted_data = encrypt(input_file, password)

    # 암호화된 데이터를 새로운 파일로 저장합니다.
    with open(output_file, 'wb') as file:
        file.write(encrypted_data)

위의 코드에서는 encrypt_file 함수를 사용하여 입력 파일을 읽고, 비밀번호를 사용하여 암호화한 후 새로운 파일로 저장하는 과정을 수행합니다. 이제 아래와 같이 함수를 호출하여 파일을 암호화할 수 있습니다.

encrypt_file('input.txt', 'encrypted.txt', 'mypassword')

디렉토리 암호화하기

디렉토리를 암호화하는 작업은 조금 더 복잡합니다. 디렉토리는 여러 개의 파일과 하위 디렉토리로 구성되어 있기 때문에, 모든 파일과 디렉토리를 순회하며 각각을 암호화해야 합니다.

아래는 디렉토리를 암호화하는 함수의 예시입니다.

import os

def encrypt_directory(input_directory, output_directory, password):
    # 암호화된 파일이 저장될 디렉토리 생성
    os.makedirs(output_directory, exist_ok=True)

    for root, dirs, files in os.walk(input_directory):
        for file in files:
            input_file = os.path.join(root, file)
            output_file = input_file.replace(input_directory, output_directory)

            # 파일을 암호화하여 저장
            encrypt_file(input_file, output_file, password)

위의 코드는 입력 디렉토리를 순회하며 각각의 파일을 암호화하여 출력 디렉토리에 저장합니다. 아래와 같이 함수를 호출하여 디렉토리를 암호화할 수 있습니다.

encrypt_directory('input_directory', 'encrypted_directory', 'mypassword')

마무리

위에서는 shutil 라이브러리를 사용하여 파일 및 디렉토리를 암호화하는 방법에 대해 알아보았습니다. 암호화된 데이터개인정보 보호기업 비밀 유출 방지를 위해 매우 중요합니다. 위의 예시 코드를 사용하면 손쉽게 파일과 디렉토리를 암호화할 수 있습니다. 암호화된 데이터를 안전한 장소에 저장하여 보호하는 것을 잊지 마세요.