如何在我的 python 脚本中存储密码,但在部署到 Github 时让任何用户都看不到它?

How to store a password in my python script but have it obscured from any users when deployed to 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,但到目前为止我发现的所有内容都建议使用密钥加密密码,然后将密钥存储在脚本中以便在使用时解密密码。这对我来说似乎是个坏主意,因为任何新手(比如我!)都可以轻松解密它,因为密钥存储在脚本中。

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

如果其他人必须使用您的密码才能使用您的脚本,不可能。如果电脑能看懂,那么用户也会想办法看懂。

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

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

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