您好我需要建立一个邮件系统,我需要执行以下操作:
我一直关注this使用aes-256进行加密并使用我的私钥进行签名。但是我不知道如何使用RSA公钥加密aes-256密钥并将其发送到同一封电子邮件中。我正在看一个python方法,但是如果有人能指出我甚至是openssl命令行版本,我可以编写一个python包装器来实现同样的目的。
编辑:
我目前使用此方法使用AES 256通过S / MIME进行加密:
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()
答案 0 :(得分:1)
您似乎正在使用已包含对S / MIME支持的M2Crypto。它会为您处理所有细节!它将执行加密和签名。您不必明确加密秘密并将其附加到邮件中。 M2Crypto为您做到这一点。