[python] PyCrypto를 사용하여 암호화된 이메일 받기

이메일은 개인정보와 중요한 정보가 포함된 통신 수단이기 때문에 보안이 매우 중요합니다. 이메일을 암호화하여 안전하게 보내는 방법은 여러 가지가 있습니다. 이번 글에서는 Python의 PyCrypto 라이브러리를 사용하여 암호화된 이메일을 받는 방법을 알아보겠습니다.

필요한 도구 설치

먼저 PyCrypto 라이브러리를 설치해야 합니다. 다음 명령어를 사용하여 PyCrypto를 설치할 수 있습니다.

pip install pycrypto

이메일 암호화 키 생성

이메일을 암호화하려면 사용할 키를 생성해야 합니다. 다음 코드를 사용하여 키를 생성할 수 있습니다.

from Crypto import Random
from Crypto.PublicKey import RSA

# 키 쌍 생성
random_generator = Random.new().read
key = RSA.generate(2048, random_generator)

# 개인 키 저장
private_key = key.export_key()
with open('private_key.pem', 'wb') as f:
    f.write(private_key)

# 공개 키 저장
public_key = key.publickey().export_key()
with open('public_key.pem', 'wb') as f:
    f.write(public_key)

위 코드를 실행하면 ‘private_key.pem’과 ‘public_key.pem’ 두 개의 파일이 생성됩니다. 개인 키는 암호화된 이메일을 해독하는 데 사용되고, 공개 키는 이메일을 암호화하는 데 사용됩니다.

암호화된 이메일 받기

이제 암호화된 이메일을 받는 코드를 작성해보겠습니다. 다음 코드는 Gmail API를 사용하여 암호화된 이메일을 받고, 개인 키를 사용하여 복호화하는 예제입니다.

import base64
import imaplib
import email
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5

# Gmail IMAP 서버 접속
mail = imaplib.IMAP4_SSL('imap.gmail.com')
mail.login('your_email@gmail.com', 'your_password')
mail.select('inbox')

# 암호화된 이메일 확인
result, data = mail.search(None, 'FROM', 'your_contact@gmail.com', 'UNSEEN')
email_ids = data[0].split()

for email_id in email_ids:
    result, email_data = mail.fetch(email_id, '(RFC822)')
    raw_email = email_data[0][1]
    msg = email.message_from_bytes(raw_email)

    # 암호화된 데이터 추출
    encrypted_data = base64.urlsafe_b64decode(msg.get_payload().encode())
    encrypted_msg = encrypted_data.decode()

    # 개인 키 로드
    with open('private_key.pem', 'rb') as f:
        private_key = RSA.import_key(f.read())

    # 복호화
    cipher = PKCS1_v1_5.new(private_key)
    decrypted_msg = cipher.decrypt(base64.urlsafe_b64decode(encrypted_msg), None).decode()

    print('Decrypted Message:', decrypted_msg)

mail.logout()

위 코드를 실행하면 Gmail 계정으로부터 암호화된 이메일을 받아와서 복호화한 후, 복호화된 메시지를 출력합니다.

이제 암호화된 이메일을 안전하게 받을 수 있게 되었습니다. PyCrypto를 사용하여 암호화된 이메일을 받는 방법을 알아봤는데, 다른 암호화 관련 기술이나 라이브러리를 공부하여 더 높은 수준의 보안을 구축할 수 있습니다.

참고 자료