背景
最近听说了一起非常有意思的密码泄露事件。大致上来说是这样的;一开始的时候程序员把 MySQL 用户名和密码直接写在了代码里面;后来他们可能也是觉得不安全,就把密码迁移到了配置文件中去。
看起来是没事了,但是 git 会帮记住一切!!!好巧不巧有一天 git 被泄露了,通过查看历史版本,MySQL 的用户名和密码就这样被发现。
现代的密码处理方式
操作系统提供的“钥匙串”功能是非常好的密码管理方式。各大浏览器都已经支持了这个功能,我现在已经不去记,我注册的那些用户名和密码了,都交给浏览器从钥匙串 (keyring) 中读取。
既然浏览器可以从钥匙串中读取密码,那我们的 Python 程序一定也可以呀!
让 Python 集成钥匙串功能
想要让 Python 能访问钥匙串可以说是非常简单,因为已经有大佬把相关的功能打包到了 keyring 这个软件包里面去了。所以我们只要把这个包安装上用起来就行了。Python 包的 API 向来简单,我们只需要三步就能从入门到精通了。
1. 第一步:安装依赖包
Mac 系统
pip3 install keyring
Linux 系统
pip3 install keyring keyrings.alt
2. 第二步:通过 keyring 向钥匙串中写入账户信息
import keyring
keyring.set_password("system", "username", "pass!1234")
就是这么简单,现在我们可以在钥匙串中看到它,如下下图。
3.第三步:通过代码查询钥匙串的密码
In [1]: import keyring
In [2]: keyring.get_password("system", "username")
Out[2]: 'pass!1234'
In [3]:
可以看到密码已经查出来了。
keyring 的命令行工具
keyring 库不但提供了钥匙串的 API 接口,这使得这个库更好用了。就拿我来说吧,我通常是用命令行工具去设置用户名密码,而 Python 代码中只去读取用户名和密码信息。
1. 通过 keyring 命令设置密码
keyring set system username
Password for 'username' in 'system': *****
2. 通过 keyring 命令读取密码
keyring get system username
pass!1234
3. 通过 keyring 命令清理已经存在的密码
keyring del system username