[python] PyCrypto를 이용한 암호화된 데이터 저장하기

이번 글에서는 Python의 PyCrypto 라이브러리를 사용하여 암호화된 데이터를 저장하는 방법에 대해 알아보겠습니다. PyCrypto는 암호화 및 해시 기능을 제공하는 강력한 라이브러리로 많은 애플리케이션에서 사용됩니다.

PyCrypto 설치하기

PyCrypto를 사용하기 위해서는 먼저 설치해야 합니다. pip을 통해 간단하게 설치할 수 있습니다.

pip install pycrypto

데이터 암호화하기

먼저 암호화할 데이터를 준비해야 합니다. 이때 사용할 수 있는 데이터 형식은 문자열, 바이트 배열 등 다양하게 있습니다.

from Crypto.Cipher import AES
import base64

def encrypt_data(key, data):
    # 16 바이트 맞추기 위해 PKCS7 패딩 사용
    pad = lambda s: s + (16 - len(s) % 16) * chr(16 - len(s) % 16)
    padded_data = pad(data.encode('utf-8'))
    
    # AES 암호화 모드 생성
    cipher = AES.new(key.encode('utf-8'), AES.MODE_ECB)
    
    # 데이터 암호화
    encrypted_data = base64.b64encode(cipher.encrypt(padded_data))
    
    return encrypted_data.decode('utf-8')

위 코드에서 key는 암호화에 사용할 키이고, data는 암호화할 데이터입니다. 코드 내부에서는 AES 암호화 모드를 사용하고 있으며, PKCS7 패딩을 사용하여 데이터를 16바이트로 맞춥니다.

암호화된 데이터 저장하기

암호화된 데이터를 파일로 저장하는 방법은 여러 가지가 있습니다. 가장 간단한 방법은 텍스트 파일에 저장하는 것입니다. 다음은 암호화된 데이터를 텍스트 파일로 저장하는 예제입니다.

def save_encrypted_data_to_file(filename, encrypted_data):
    with open(filename, 'w') as f:
        f.write(encrypted_data)

위 코드에서 filename은 저장할 파일의 경로이고, encrypted_data는 암호화된 데이터입니다. open 함수를 사용하여 파일을 열고, write 함수를 사용하여 데이터를 파일에 씁니다.

데이터 복호화하기

암호화된 데이터를 복호화하기 위해서는 암호화에 사용한 키와 복호화할 데이터가 필요합니다. 다음은 복호화하는 함수의 예입니다.

def decrypt_data(key, encrypted_data):
    cipher = AES.new(key.encode('utf-8'), AES.MODE_ECB)
    decrypted_data = cipher.decrypt(base64.b64decode(encrypted_data.encode('utf-8')))
    
    # PKCS7 언패딩
    unpad = lambda s: s[:-ord(s[len(s)-1:])]
    unpadded_data = unpad(decrypted_data)
    
    return unpadded_data.decode('utf-8')

예제 실행하기

이제 암호화 및 복호화 예제를 실행해보겠습니다.

key = 'mysecretpassword'
data = 'Hello, World!'

encrypted_data = encrypt_data(key, data)
print('암호화된 데이터:', encrypted_data)

filename = 'encrypted_data.txt'
save_encrypted_data_to_file(filename, encrypted_data)
print('암호화된 데이터를 파일로 저장했습니다.')

encrypted_data_from_file = open(filename, 'r').read()
decrypted_data = decrypt_data(key, encrypted_data_from_file)
print('복호화된 데이터:', decrypted_data)

위 코드를 실행하면 입력한 데이터가 암호화되어 출력되고, 파일로 저장된 후 다시 복호화되어 출력되는 것을 확인할 수 있습니다.

결론

PyCrypto를 사용하여 암호화된 데이터를 저장하는 방법을 살펴보았습니다. 데이터의 보안이 필요한 경우, PyCrypto를 사용하여 데이터를 암호화할 수 있습니다. 이를 통해 사용자의 개인 정보 등 중요한 데이터를 안전하게 저장할 수 있습니다.

프로그래밍 및 보안에 관심이 있는 분들에게 유용한 정보가 되었기를 바라며, 더 많은 정보는 PyCrypto의 공식 문서를 참조하시기 바랍니다.

참고자료: