[파이썬] 암호화된 데이터의 저장과 전송 방법

암호화된 데이터의 안전한 저장과 전송은 현대 정보 보안에 매우 중요한 부분입니다. 데이터를 암호화하면 외부에서 데이터를 열람하거나 변조하는 것을 방지할 수 있습니다. 이 글에서는 Python을 사용하여 암호화된 데이터의 저장과 전송 방법에 대해 알아보겠습니다.

데이터 암호화

데이터를 암호화하기 위해서는 암호화 알고리즘과 암호화 키가 필요합니다. Python에서는 cryptography 라이브러리를 사용하여 간단하고 안전한 암호화를 수행할 수 있습니다.

from cryptography.fernet import Fernet

# 암호화 키 생성
key = Fernet.generate_key()

# 암호화 객체 생성
fernet = Fernet(key)

# 데이터 암호화
original_data = b"Hello, World!"
encrypted_data = fernet.encrypt(original_data)

위의 예제에서는 Fernet 클래스를 사용하여 암호화 키를 생성하고, 암호화 객체를 생성한 다음 데이터를 암호화했습니다. original_data는 암호화되지 않은 원본 데이터이고, encrypted_data는 암호화된 데이터입니다.

암호화된 데이터 저장

암호화된 데이터를 저장하기 위해서는 파일이나 데이터베이스에 데이터를 쓸 때 암호화해야 합니다. 이를 위해 cryptography 라이브러리의 Fernet 클래스를 사용할 수 있습니다.

# 암호화된 데이터 저장
with open("encrypted_data.bin", "wb") as file:
    file.write(encrypted_data)

위의 예제에서는 open 함수를 사용하여 암호화된 데이터를 저장할 파일을 열고, write 메서드를 호출하여 데이터를 씁니다. wb 옵션은 바이너리 모드로 파일을 열어야 함을 나타냅니다.

암호화된 데이터 전송

암호화된 데이터를 전송하기 위해서는 데이터를 보낼 때 암호화되어야 하며, 데이터를 받는 쪽에서는 암호화를 해제하여 원본 데이터를 얻어야 합니다. 일반적으로 네트워크 통신 라이브러리를 사용하여 데이터를 전송하는 방법은 다를 수 있지만, 여기서는 예시로 socket 라이브러리를 사용한 방법을 소개합니다.

import socket

# 데이터 전송
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.connect(("destination_address", 1234))
    s.sendall(encrypted_data)

위의 예제에서는 socket 모듈을 사용하여 TCP 소켓을 생성하고, 목적지 주소와 포트에 연결한 다음, sendall 메서드를 사용하여 암호화된 데이터를 전송합니다.

암호화된 데이터를 받는 쪽에서는 전송된 데이터를 받은 다음, 암호화를 해제하여 원본 데이터를 얻을 수 있습니다.

import socket
from cryptography.fernet import Fernet

# 데이터 수신
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind(("0.0.0.0", 1234))
    s.listen(1)
    conn, addr = s.accept()
    received_data = conn.recv(1024)

# 데이터 복호화
decrypted_data = fernet.decrypt(received_data)

위의 예제에서는 socket 모듈을 사용하여 TCP 소켓을 생성하고, 로컬 주소와 포트에 바인딩한 다음, listen 메서드를 호출하여 통신을 대기합니다. accept 메서드를 호출하여 연결을 수락하고, recv 메서드를 사용하여 전송된 데이터를 받습니다. 마지막으로 fernet.decrypt 메서드를 호출하여 데이터를 암호 해제합니다.