如何将密码存储在我的 python 脚本中,但在部署到 Github 时对任何用户隐藏?

问题描述

我已经尝试解决这个问题有一段时间了,但一直在寻找不完美的解决方案 - 我认为我想做的事情是可能的,但也许我没有正确地表达我的 Google 搜索

我有一个 Python 脚本,可以向用户发送电子邮件通知 - 为了发送所述电子邮件,我需要在脚本中提供密码才能发送电子邮件代码运行良好,但它要求我将密码传递给脚本:

def send_email():
    import smtplib
    import ssl
    from email.mime.text import MIMEText
    from email.mime.multipart import MIMEMultipart

    sender_email = "my-generic-email@gmail.com"
    receiver_email = "recipient@gmail.com"
    password = "my_password_here"  

    message = MIMEMultipart("alternative")
    message["Subject"] = "subject_here"
    message["From"] = sender_email
    message["To"] = receiver_email

    # Create the plain-text and HTML version of your message
    text = f"""\
    Plain text body here
    """

    # Create secure connection with server and send email
    context = ssl.create_default_context()
    with smtplib.SMTP_SSL("smtp.gmail.com",465,context=context) as server:
        server.login(sender_email,password)
        server.sendmail(
            sender_email,receiver_email,message.as_string()
        )

出于显而易见的原因,我不想将密码存储为纯文本。我想过环境变量,但这不起作用,因为这将部署在 GitHub 上供其他人使用(或作为 EXE 安装),因此这会破坏电子邮件功能

我曾尝试查看 PyCryptodome,但到目前为止我发现的任何内容都建议使用密钥加密密码,然后将密钥存储在脚本中以在您使用密码时解密密码。这对我来说似乎是个坏主意,因为任何新手(比如我!)都可以轻松解密,因为密钥存储在脚本中。

有人能帮助我朝着正确的方向前进吗?我完全没有想法,因为坦率地说,我对密码存储/安全几乎一无所知,所以我什至不确定我应该在谷歌上搜索什么!

解决方法

如果其他人必须使用您的密码才能使用您的脚本,那不可能。如果计算机可以读取它,那么用户也会找到读取它的方法。

我建议使用电子邮件服务,用户可以在其中输入自己的 API 密钥或让他们输入自己的 GMail 凭据。

如果我错了,请纠正我,但我认为在这种情况下无法使用您的密码,除非您编写 API 并从您的服务器发送电子邮件。但请不要忘记,在这种情况下,用户可能会使用您的 API 作为发送垃圾邮件的方式。

TL;DR:让用户使用自己的密码。