파이썬 PyCrypto를 이용한 파일 암호화 프로그래밍하기

파일의 안전한 보호를 위해 암호화는 매우 중요합니다. PyCrypto는 파이썬에서 암호화 기능을 제공하는 강력한 라이브러리입니다. 이번 글에서는 PyCrypto를 사용하여 파일을 암호화하는 방법에 대해 알아보겠습니다.

PyCrypto 설치하기

먼저, PyCrypto를 설치해야 합니다. 다음 명령을 사용하여 파이썬 패키지 관리자를 통해 PyCrypto를 설치할 수 있습니다.

pip install pycrypto

파일 암호화와 복호화

암호화

파일을 암호화하기 위해서는 먼저 암호화에 사용될 키를 생성해야 합니다. 이 키는 암복호화 과정에서 사용될 것입니다. 다음은 파일을 암호화하는 간단한 예제 코드입니다.

from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes

def encrypt_file(file_path, key):
    cipher = AES.new(key, AES.MODE_EAX)
    
    with open(file_path, 'rb') as file:
        plaintext = file.read()
    
    ciphertext, tag = cipher.encrypt_and_digest(plaintext)
    
    with open(file_path + '.enc', 'wb') as file:
        [file.write(x) for x in (cipher.nonce, tag, ciphertext)]

key = get_random_bytes(16)
encrypt_file('example.txt', key)

이 코드에서는 AES 알고리즘을 사용하여 파일을 암호화합니다. 암호화를 위해 먼저 AES.new() 함수를 사용하여 암호화 객체를 생성하고, encrypt_and_digest() 메서드를 사용하여 암호문과 인증 태그를 생성합니다. 마지막으로, 암호화된 파일을 .enc 확장자를 가진 새 파일에 저장합니다.

복호화

이제 암호화된 파일을 복호화하는 방법에 대해 알아보겠습니다. 다음은 파일을 복호화하는 간단한 예제 코드입니다.

from Crypto.Cipher import AES

def decrypt_file(file_path, key):
    with open(file_path, 'rb') as file:
        nonce, tag, ciphertext = [file.read(x) for x in (16, 16, -1)]
    
    cipher = AES.new(key, AES.MODE_EAX, nonce)
    plaintext = cipher.decrypt_and_verify(ciphertext, tag)
    
    with open(file_path.replace('.enc', ''), 'wb') as file:
        file.write(plaintext)

key = get_random_bytes(16)
decrypt_file('example.txt.enc', key)

이 코드에서는 암호화 과정에서 생성된 nonce, tag, ciphertext 값을 사용하여 복호화를 수행합니다. 복호화 과정에서는 AES.new() 함수를 사용하여 복호화 객체를 생성하고, decrypt_and_verify() 메서드를 사용하여 원본 파일을 복호화합니다. 마지막으로, 복호화된 데이터를 원본 파일 이름으로 저장합니다.

마치며

PyCrypto를 사용하면 파이썬에서 파일 암호화를 간단히 구현할 수 있습니다. 하지만, 이 코드는 단순한 예제일 뿐이며 실제 보안 요구사항을 충족하지 못할 수 있습니다. 실전에서는 암호화 알고리즘, 키 관리, 데이터 무결성 등을 고려해야 합니다.

더 자세한 내용을 알고 싶다면 PyCrypto 공식 문서를 참조하시기 바랍니다.

#파이썬 #PyCrypto