如何在代码本身中使用密码加密登录?好吧,或者以其他方式使其他人无法获得它们,因为代码本身必须是开放的并且可供其他人查看。
conn = pymysql.connect(
host="xxc.ru",
port=3306,
user="user",
password="password",
db="test",
charset='utf8'
)
在这种情况下使用凯撒密码是否有意义,就像问题一样?
如何在代码本身中使用密码加密登录?好吧,或者以其他方式使其他人无法获得它们,因为代码本身必须是开放的并且可供其他人查看。
conn = pymysql.connect(
host="xxc.ru",
port=3306,
user="user",
password="password",
db="test",
charset='utf8'
)
在这种情况下使用凯撒密码是否有意义,就像问题一样?
像我这样聪明的学生很快就能破解凯撒的密码。分开飞,分开炸肉排:只要不要在代码里面写密码,问题会自己解决的。此外,要连接到其他数据库,您不需要编辑代码,这增加了便利性。但是在哪里写密码 - 已经有很多选择了。
环境变量
在任何“成人”操作系统中,都有一些全局变量称为环境变量(environment variables,environment variables)。您可以将密码放在那里,然后在 python 中读取这些变量。如何更改环境变量取决于特定的操作系统(您可以阅读 Wikipedia 上的详细信息),在 Python 代码中,阅读它们可能如下所示:
在此示例中,登录名是从环境变量中读取的,密码是从 中读取
MYSQL_USER的MYSQL_PASSWORD。纯文本文件
本质很简单:我们在任何文本编辑器中编写密码,将其保存到文本文件中,然后在 python 中读取该文件。
在此示例中,登录名和密码从文件中读取
mysql_user.txt并mysql_password.txt位于当前目录中。稍微解释一下为什么我以这种方式读取文件:
使用后明确关闭打开的文件是一种很好的方式。
with这对;来说非常方便。UTF-8 是世界上最好的编码,所以我把它写下来,并建议你随时随地使用它。但有一个细微差别:Windows 记事本在文本文件的开头添加了BOM,为了通过 python 正确处理,我规定了编码
utf-8-sig,而不仅仅是utf-8;一些文本编辑器在文件末尾添加了一个换行符,所以我用 删除它
rstrip(),以免干扰。完整的配置文件
您很可能不仅希望将登录名和密码与代码分开存储,那么为什么不拥有一个完整的配置呢?例如,您可以创建这样的文件
config.ini:然后在python中解析它:
ConfigParser- 非常强大和多才多艺的东西;我建议至少阅读文档以进行一般开发。如果您想在某个 GitHub 上公开发布您的代码,请不要忘记将带有所有密码的文件添加到
.gitignore.带变量的 Python 模块
例如,您可以创建一个 Python 文件,
local_settings.py并在其中写入带有登录名和密码的变量:然后在导入后访问它们:
由于它
local_settings.py是一个成熟的 Python 文件,您可以在其中执行一些任意代码,这与文本文件相比增加了灵活性,但同时开辟了新的方法,所以要小心。必须找到该文件,以便 Python 可以找到并导入它。它可能不会在所有环境中从当前目录导入文件,如果上面示例中的简单导入不适合您,您可能需要设置环境变量
PYTHONPATH=.或将当前目录添加到sys.path.顺便说一句,所有与文件相关的方法都可以与环境变量结合使用。底线是这样的:我们在环境变量中写入要读取的内容,然后 Python 代码读取那里指定的文件(或导入指定的模块):
SETTINGS_MODULE=my_mysql_settings这样,您可以拥有多个配置文件并使用环境变量在它们之间切换。例如,在流行的 Django web 框架中使用了类似的方法(比我展示的更复杂,但类似);有这样一个环境变量叫做
DJANGO_SETTINGS_MODULE.根本不要存储任何东西,每次都在控制台中请求
每次都输入数据库密码不是很方便,但还是一种选择。同时,使用
getpass输入的文本不会显示在控制台中(即使没有星号),所以没有人会知道你在那里输入了什么密码。如果在您机器上的 Windows 上,那么您可以创建两个环境变量并将它们存储在其中。并在程序中,显式读取带有名称的环境变量,例如USERPYTHON PASSWORDSQL并使用它们的值,从而将您的数据隐藏在学生的眼中))
要么使用存储在其他人的抓取笔无法获取的配置文件,要么对其进行加密,但要认真对待,这样在没有密钥的情况下(例如通过 DES)解密将是漫长而乏味的。
通常加密的密码存储在数据库中,如果您不打算使用数据库,则在本地存储凭据管理器中 - 存储会为您加密所有内容。密钥环也适用于 linux 凭据。