[python] M2Crypto를 사용하여 S/MIME 암호화된 이메일을 보내는 방법은 어떻게 되나요?
-
먼저 M2Crypto를 설치합니다.
pip install M2Crypto
-
다음, 발신자의 개인 키와 인증서 파일을 읽어옵니다.
from M2Crypto import SMIME, BIO # 발신자의 개인 키와 인증서 파일 경로 key_file = 'path_to_sender_private_key.pem' cert_file = 'path_to_sender_certificate.pem' # 개인 키와 인증서를 읽어옴 key = open(key_file, 'rb').read() cert = open(cert_file, 'rb').read()
-
수신자의 공개 키를 획득하여 이를 이용해 암호화합니다.
# 수신자의 공개 키 recipient_cert_file = 'path_to_recipient_certificate.pem' recipient_cert = open(recipient_cert_file, 'rb').read() # 암호화 s = SMIME.SMIME() s.load_key(key, cert) x509 = BIO.MemoryBuffer(recipient_cert) sk = X509.X509_Stack() sk.push(X509.load_cert(recipient_cert)) s.set_x509_stack(sk) p7 = s.encrypt(BIO.MemoryBuffer('Hello, encrypted email!'), flags=SMIME.PKCS7_TEXT)
-
마지막으로, 이메일을 보냅니다.
import smtplib from email.mime.multipart import MIMEMultipart from email.mime.base import MIMEBase from email import encoders # 이메일 구성 msg = MIMEMultipart() msg['From'] = 'sender@example.com' msg['To'] = 'recipient@example.com' msg['Subject'] = '암호화된 이메일' # 암호화된 내용을 이메일에 추가 part = MIMEBase('application', 'octet-stream') part.set_payload(p7.pprint()) encoders.encode_base64(part) part.add_header('Content-Disposition', 'attachment; filename="encrypted.p7"') msg.attach(part) # SMTP 서버에 연결하여 이메일 전송 smtp_server = 'smtp.example.com' smtp_port = 25 server = smtplib.SMTP(smtp_server, smtp_port) server.sendmail('sender@example.com', 'recipient@example.com', msg.as_string()) server.quit()
이렇게하면 M2Crypto를 사용하여 S/MIME 암호화된 이메일을 보낼 수 있습니다.