В настоящее время я пытаюсь добавить поддержку подписи PGP в my small e-mail sending script (в которой используются модули Python 3.x и python-gnupg).PGP-подписывание многопользовательских писем с Python
Код, который подписывает сообщение является:
gpg = gnupg.GPG()
basetext = basemsg.as_string().replace('\n', '\r\n')
signature = str(gpg.sign(basetext, detach=True))
if signature:
signmsg = messageFromSignature(signature)
msg = MIMEMultipart(_subtype="signed", micalg="pgp-sha1",
protocol="application/pgp-signature")
msg.attach(basemsg)
msg.attach(signmsg)
else:
print('Warning: failed to sign the message!')
(Здесь basemsg
имеет email.message.Message
типа.)
И messageFromSignature
функция:
def messageFromSignature(signature):
message = Message()
message['Content-Type'] = 'application/pgp-signature; name="signature.asc"'
message['Content-Description'] = 'OpenPGP digital signature'
message.set_payload(signature)
return message
Затем добавить все необходимые заголовки к сообщению (msg
) и отправить его.
Это хорошо работает для сообщений, не связанных с несколькими сообщениями, но с ошибкой, когда basemsg
является multipart (multipart/alternative
или multipart/mixed
).
Вручную проверять подпись на соответствующей части текста, но Evolution и Mutt сообщают, что подпись плохая.
Может ли кто-нибудь указать мне на мою ошибку?
Как вы это исправили? Есть ли место, чтобы легко добавить новую строку, или вам нужно было обезопасить email.generator? У меня такая же проблема. – micah
@MicahLee Я не нашел никакого способа, кроме (обезьяны), исправления 'email.generator'. –