在Python脚本中隐藏密码(仅不安全的混淆)
我有一个Python脚本,它在创建一个ODBC连接。这个ODBC连接是通过一个连接字符串生成的。在这个连接字符串里,我需要包含这个连接的用户名和密码。
有没有简单的方法可以让这个密码在文件里不那么明显(也就是说,当我编辑这个文件时,别人看不到密码)?
21 个回答
59
在Unix系统中,当你需要为远程登录设置密码时,Douglas F Shearer 提出的方案是大家普遍认可的做法。
你可以添加一个--password-from-file选项,这样就可以指定一个文件的路径,从这个文件中读取明文密码。
这个文件可以放在用户自己的区域,操作系统会保护这个区域不被随意访问。这样,不同的用户就可以自动使用自己的密码文件。
如果脚本的用户不被允许知道密码,你可以用更高的权限来运行这个脚本,并让这个密码文件归那个管理员或根用户所有。
73
这里有一个简单的方法:
- 首先,创建一个Python模块,我们叫它peekaboo.py。
- 在peekaboo.py里面,写上密码和任何需要用到这个密码的代码。
- 通过导入这个模块(可以在Python命令行等地方),创建一个编译后的版本 - peekaboo.pyc。
- 然后,删除peekaboo.py。
- 现在,你可以只依赖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