我希望Python在某些事件发生后自动发送邮件。在我的脚本中,我必须输入密码。有没有办法加密我的密码并在此脚本中使用它?
请举个例子,因为我不是python的专家。我在这个主题上看到的答案很少,但是没有完全讨论,只给出了一些提示。
答案 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帐户。在这种情况下,你可能已经输了。
像这样的案例中最大的挑战是可操作的。 以下是您应该不做的事情的一些例子;
更新:您还应该考虑脚本如何使用密码。如果它以明文形式通过互联网发送密码,则无论如何都没有太多安全性。
答案 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仓库中的用户名/密码/电子邮件,包括所有历史记录:)