Привет, мне нужно создать систему рассылки, в которой мне нужно сделать следующее:
- Генерация ключа AES 256
- Зашифровать электронную почту с помощью этого ключа aes-256
- Зашифруйте ключ aes-256, используя открытый ключ получателя.
- Подпишите письмо, используя мой закрытый ключ
- Отправьте все это получателю
Я следил за этим, чтобы выполнить шифрование с помощью aes- 256 и подписать с помощью моего закрытого ключа. Однако я не знаю, как я могу зашифровать ключ aes-256 с помощью открытого ключа RSA и отправить его в том же электронном письме. Я смотрю на подход python, но если кто-то может указать мне даже на версию командной строки openssl, я могу написать оболочку python, чтобы добиться того же.
РЕДАКТИРОВАТЬ:
В настоящее время я использую этот метод для шифрования через S/MIME с использованием AES 256:
def sendsmime(from_addr, to_addrs, subject, msg, from_key, from_cert=None, to_certs=None):
msg_bio = BIO.MemoryBuffer(msg)
sign = from_key
encrypt = to_certs
s = SMIME.SMIME()
if sign:
s.load_key(from_key, from_cert)
p7 = s.sign(msg_bio, flags=SMIME.PKCS7_TEXT)
msg_bio = BIO.MemoryBuffer(msg) # Recreate coz sign() has consumed it.
if encrypt:
sk = X509.X509_Stack()
for x in to_certs:
sk.push(X509.load_cert(x))
s.set_x509_stack(sk)
s.set_cipher(SMIME.Cipher('aes_256_cbc'))
tmp_bio = BIO.MemoryBuffer()
if sign:
s.write(tmp_bio, p7)
else:
tmp_bio.write(msg)
p7 = s.encrypt(tmp_bio)
out = BIO.MemoryBuffer()
out.write('From: %s\r\n' % from_addr)
out.write('To: %s\r\n' % to_addrs)
out.write('Subject: %s\r\n' % subject)
if encrypt:
s.write(out, p7)
else:
if sign:
s.write(out, p7, msg_bio, SMIME.PKCS7_TEXT)
else:
out.write('\r\n')
out.write(msg)
out.close()
smtp = smtplib.SMTP()
smtp.connect('smtp.provider.net', 587)
smtp.login('username', 'password')
smtp.sendmail(from_addr, to_addrs, out.read())
smtp.quit()