如何在我的 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:让用户使用自己的密码。
我已经尝试解决这个问题一段时间了,但一直在寻找不完美的解决方案 - 我认为我想做的是可能的,但也许我没有正确地表达我的 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:让用户使用自己的密码。