python中密码的安全性

python中密码的安全性,python,email,encryption,Python,Email,Encryption,我正在学习python,所以我想我会尝试制作一个脚本,自动为我发送gmail电子邮件 它需要发送一个登录名和密码到我的gmail帐户,自动为我发送一些电子邮件 我在这里读了一些指南,似乎passlib是一个不错的选择。但我仍然有点困惑如何设置它 我使用passlib加密我的密码 结果将存储在我的linux虚拟机中的一个隐藏文件中 当脚本运行时,它需要解析我的虚拟机上隐藏的文件以获取hased密码 这是我困惑的地方,我想我需要解密它,然后再发送出去?这不是很不安全吗?或者我可以发送它而不解密,希望

我正在学习python,所以我想我会尝试制作一个脚本,自动为我发送gmail电子邮件

它需要发送一个登录名和密码到我的gmail帐户,自动为我发送一些电子邮件

我在这里读了一些指南,似乎passlib是一个不错的选择。但我仍然有点困惑如何设置它

  • 我使用passlib加密我的密码
  • 结果将存储在我的linux虚拟机中的一个隐藏文件中
  • 当脚本运行时,它需要解析我的虚拟机上隐藏的文件以获取hased密码
  • 这是我困惑的地方,我想我需要解密它,然后再发送出去?这不是很不安全吗?或者我可以发送它而不解密,希望gmail可以解密它
  • 我正在使用SMTP库

    server = smtplib.SMTP('smtp.gmail.com', 587)
    server.ehlo()
    server.starttls()
    server.login(gmail_sender, gmail_passwd)
    

    谢谢

    starttls()调用设置了加密的SSL/TLS连接,因此密码不会以明文形式发送。是,在将密码发送到服务器之前,您需要解密密码。login()。或者,您可以将密码存储在一个环境变量中,并将其读入python,这虽然不那么安全,但更易于实现。

    starttls()调用设置加密的SSL/TLS连接,因此密码不会以明文形式发送。是,在将密码发送到服务器之前,您需要解密密码。login()。或者,您可以将密码存储在一个环境变量中,并将其读入python,这虽然不那么安全,但更易于实现。

    Passlib实际上可能不是正确的选择。它主要关注密码的单向散列。您可以使用生成的哈希来验证用户提供的密码是否与您的哈希匹配,但不能解密哈希。(较旧的Passlib版本确实有一个名称不正确的
    .encrypt()
    方法,但Passlib 1.7将其重命名为
    .hash()

    根据您的用例,您可能需要两件事情中的一件:

    • 是一个python接口,用于在操作系统控制的“钱包”中保存和存储密码。它在windows、linux等平台上跨平台工作
    但是,如果密码需要从在登录桌面会话之外触发的脚本运行,则使用起来可能会很尴尬

    在这种情况下,您可能需要加密用于存储的凭据,并选择一个密码(在调用脚本时提供,例如从命令行提示符或env var)来解密这些凭据

    • 是做那样事情的好选择;它提供了许多不需要(太多)加密经验的高级函数,例如它们的助手
        在这里,Passlib实际上可能不是正确的选择。它主要关注密码的单向散列。您可以使用生成的哈希来验证用户提供的密码是否与您的哈希匹配,但不能解密哈希。(较旧的Passlib版本确实有一个名称不正确的
        .encrypt()
        方法,但Passlib 1.7将其重命名为
        .hash()

        根据您的用例,您可能需要两件事情中的一件:

        • 是一个python接口,用于在操作系统控制的“钱包”中保存和存储密码。它在windows、linux等平台上跨平台工作
        但是,如果密码需要从在登录桌面会话之外触发的脚本运行,则使用起来可能会很尴尬

        在这种情况下,您可能需要加密用于存储的凭据,并选择一个密码(在调用脚本时提供,例如从命令行提示符或env var)来解密这些凭据

        • 是做那样事情的好选择;它提供了许多不需要(太多)加密经验的高级函数,例如它们的助手
        或在点文件中。除了将密码硬编码到脚本()或点文件中之外的任何内容。除了将密码硬编码到脚本中之外的任何内容:)是的,这是不安全的。不管你如何加密密码,你都会把它存储在查找和解密密码的代码旁边。是的,这是不安全的。无论您如何加密密码,您都将其存储在查找和解密密码的代码旁边。我正在研究第二个用例,其中脚本需要定期运行,而无需人工干预。因此,如果我使用加密技术,我会给它一次密码来加密并存储在某个地方,然后当脚本执行时,会提供未加密的解密密钥?我正在查看第二个用例,其中脚本需要定期运行,而无需人工干预。所以,如果我使用加密技术,我会给它一次密码来加密并存储在某个地方,然后当脚本执行时,会提供未加密的解密密钥吗?