在Python脚本中隐藏密码(仅不安全的混淆)

168 投票
21 回答
316454 浏览
提问于 2025-04-11 09:21

我有一个Python脚本,它在创建一个ODBC连接。这个ODBC连接是通过一个连接字符串生成的。在这个连接字符串里,我需要包含这个连接的用户名和密码。

有没有简单的方法可以让这个密码在文件里不那么明显(也就是说,当我编辑这个文件时,别人看不到密码)?

21 个回答

59

在Unix系统中,当你需要为远程登录设置密码时,Douglas F Shearer 提出的方案是大家普遍认可的做法。
你可以添加一个--password-from-file选项,这样就可以指定一个文件的路径,从这个文件中读取明文密码。
这个文件可以放在用户自己的区域,操作系统会保护这个区域不被随意访问。这样,不同的用户就可以自动使用自己的密码文件。

如果脚本的用户不被允许知道密码,你可以用更高的权限来运行这个脚本,并让这个密码文件归那个管理员或根用户所有。

73

这里有一个简单的方法:

  1. 首先,创建一个Python模块,我们叫它peekaboo.py。
  2. 在peekaboo.py里面,写上密码和任何需要用到这个密码的代码。
  3. 通过导入这个模块(可以在Python命令行等地方),创建一个编译后的版本 - peekaboo.pyc。
  4. 然后,删除peekaboo.py。
  5. 现在,你可以只依赖peekaboo.pyc来导入peekaboo。因为peekaboo.pyc是经过字节编译的,所以普通用户看不懂。

这个方法应该比直接用base64解码要安全一些,虽然它还是会被py_to_pyc反编译工具破解。

144

Base64编码是Python标准库中的一个功能,可以用来防止旁观者偷窥你的数据:

>>> import base64
>>>  print(base64.b64encode("password".encode("utf-8")))
cGFzc3dvcmQ=
>>> print(base64.b64decode("cGFzc3dvcmQ=").decode("utf-8"))
password

撰写回答