如何在python电子邮件中使用加密密码

时间:2015-08-05 08:21:25

标签: python email encryption sendmail

我希望Python在某些事件发生后自动发送邮件。在我的脚本中,我必须输入密码。有没有办法加密我的密码并在此脚本中使用它?

请举个例子,因为我不是python的专家。我在这个主题上看到的答案很少,但是没有完全讨论,只给出了一些提示。

3 个答案:

答案 0 :(得分:5)

脚本需要以纯文本密码发送电子邮件。你可以对它进行加密,但是你还必须提供一种动态解密的方法。

让我用一些伪代码来说明。

现在你有这样的事情:

password = 'supersecret'
send_mail(password=password)

如果您加密密码,它将如下所示:

encrypted_password = 'kasdjhfkauedsjflh'
encryption_key = 'allyourbase'
send_mail(password=decrypt(encrypted_password, encryption_key)

正如你所看到的,它并没有什么不同。

答案 1 :(得分:2)

加密基本上试图依赖一个(并且只有一个)秘密。 也就是说,那些想要与攻击者通信而不是攻击者的人知道的一条数据。

过去曾尝试过例如(另外)保密加密算法/实现,但如果广泛使用该实现(在流行的密码系统中),这些尝试通常表现不佳。

一般来说一个秘密就是密码。因此,即使攻击者知道加密算法,如果他不知道密码,也无法解密流量。

正如其他人所表明的那样,如果攻击者可以获取脚本,那么加密密码并为脚本提供解密它的方法就是徒劳。它就像一把保险柜,上面写着锁的组合。

另一方面,只要您可以保密您的脚本,其中的密钥也是秘密的。

因此,如果您限制脚本的权限,以便只有root / administrator用户可以读取或执行它,则攻击者访问它的唯一方法就是破解root / administrator帐户。在这种情况下,你可能已经输了。

像这样的案例中最大的挑战是可操作的。 以下是您应该做的事情的一些例子;

  • 让每个用户都能阅读脚本。
  • 将脚本存储在可以通过公共访问的Web服务器读取。
  • 将其上传到github或任何其他公共托管服务。
  • 将其存储在未加密的备份中。

更新:您还应该考虑脚本如何使用密码。如果它以明文形式通过互联网发送密码,则无论如何都没有太多安全性。

答案 2 :(得分:2)

我的方法是使用密钥环,只需使用yagmail即可使用密钥环创建无密码脚本(完全透露:我是yagmail的开发人员)。

E.g。发送电子邮件:

import yagmail
yag = yagmail.SMTP()
yag.send(contents = ["See picture below", "/local/path/to/img.png"])

要完成此操作,首先安装(下方),然后使用以下方法将您的电子邮件注册到密钥环中:

yagmail.register('myemail', 'mypass')

如果您还在包含用户名的主页(.yagmail)文件夹中放置了~文件,则可以在脚本中使用yagmail.SMTP()并安全登录。

安装:

pip install yagmail   # python 2
pip3 install yagmail  # python 3

具有讽刺意味的是,我还制作了gittyleaks,您可以使用它来发现git仓库中的用户名/密码/电子邮件,包括所有历史记录:)