如何借助python第三方库存取不同应用程序的用户名、密码

  在之前的一系列文章中,小爬分享了很多用Pywin32、uiAutomation、sap Gui Script等技术实现应用程序或者Web网站(如SAP、Excel、outLook邮件系统、OA系统)的自动化操作的文章。但是,这些文章都绕开了一个知识点:如何优雅地实现自动登录。与其说是想聊聊如何实现自动登录,其实是绕到了另一个技术问题:如何安全可靠的存储、更新和读取用户名、密码?

  都2023年了,即使是给自己用的python脚本,小爬也绝不建议直接在脚本中写下明文的密码,亦或是在某个ini配置文件中直接写密码,这样密码泄露的风险非常高。如果咱们开发的脚本是准备封装为exe文件给他人使用,更是应该做好这些用户名、密码信息的安全存储,不然谁敢用你提供的工具。

  不卖关子,如果您刚好喜欢用python编程,这里推荐使用python第三方包,keyring(keyring · PyPI),非常方便。

  Python keyring库使我们轻松访问系统的keyring服务,它可以用于任何 需要安全密码存储的应用程序。在windows系统中,keyring支持的后端服务:Windows Credential Locker

Keyring简单上手

keyring最基础的用法很简单,只需要用到 keyring.set_password 以及keyring.get_password 方法:

复制代码
>>> import keyring
>>> keyring.set_password("system", "username", "password")
>>> keyring.get_password("system", "username")
'password'

命令行用法

当我们通过pip install keyring安装完之后,我们便可以在命令行(CMD、Powershell)下轻松设置、获取以及删除密码。

复制代码
PS C:\Users\Admin> keyring -h
usage: keyring [-h] [-p KEYRING_PATH] [-b KEYRING_BACKEND] [--list-backends] [--disable]
               [--print-completion {bash,zsh,tcsh}]
               [{get,set,del,diagnose}] [service] [username]

positional arguments:
  {get,set,del,diagnose}
  service
  username

optional arguments:
  -h, --help            show this help message and exit
  -p KEYRING_PATH, --keyring-path KEYRING_PATH
                        Path to the keyring backend
  -b KEYRING_BACKEND, --keyring-backend KEYRING_BACKEND
                        Name of the keyring backend
  --list-backends       List keyring backends and exit
  --disable             Disable keyring and exit
  --print-completion {bash,zsh,tcsh}
                        print shell completion script

  知道这些之后,假如我们想存储比如OA的用户名 NewJune、密码mypsd,在命令行中的效果是这样:

复制代码
PS C:\Users\admin> keyring set oa newjune
Password for 'newjune' in 'oa':
PS C:\Users\adminn> keyring get oa newjune
mypsw

API

keyring库给我们提供了这些API来调用:

  • get_keyring(): Return the currently-loaded keyring implementation.返回当前载入的keyring实现。

  • get_password(service, username): Returns the password stored in the active keyring. If the password does not exist, it will return None.返回当前活跃keyring中存储的密码,如果密码不存在,则返回None。

  • get_credential(service, username): 返回活跃keyring中的一个credential对象,对象中包含特定服务的username和password属性。username参数可以设置为None,如果某个服务存储了多组用户名密码,则会随机返回一组。

  • set_password(service, username, password): Store the password in the keyring.将密码存储入keyring中。

  • delete_password(service, username): Delete the password stored in keyring. If the password does not exist, it will raise an exception.删除存储在keyring中的密码,如果密码不存在,则会抛出异常。

有了Keyring库,我们就可以轻松将SAP、OA、浏览器等应用的用户名、密码进行系统安全级别的存储,也可以随时用脚本取出对应的凭据credential,为程序的自动登录、后台作业等场景提供支持,赶紧试试吧!

快来关注本公众号 获取更多爬虫、数据分析的知识!

相关推荐
Csvn4 小时前
Python 两大经典坑点 —— 可变默认参数 & 闭包延迟绑定
后端·python
曲幽5 小时前
别再用网页翻译看源码了!你的私人翻译神器LibreTranslate,部署避坑指南来了
python·docker·web·pot·translate·libretranslate·arogstranslate
用户556918817537 小时前
#从脚本到独立程序:Python + Playwright 批量抓取的完整踩坑记录
python·自动化运维
兵慌码乱21 小时前
基于 MediaPipe 与 PySide2 的手势交互音乐控制系统实现:轻量化视觉交互全流程解析
python·opencv·计算机视觉·人机交互·手势识别·mediapipe·pyside2
luckdewei1 天前
FastAPI 资产管理系统实战:复杂 ORM 关联、Alembic 迁移与 N+1 查询优化
python
aqi001 天前
15天学会AI应用开发(八)使用向量数据库实现RAG功能
人工智能·python·大模型·ai编程·ai应用
Csvn1 天前
`functools.lru_cache` —— 一行代码搞定缓存加速
后端·python
金銀銅鐵2 天前
[Python] 从《千字文》中随机挑选汉字
后端·python
cup112 天前
[技术复盘] Windows Python 打包实战:Nuitka 环境踩坑总结与 CI 自动化构建全指南
python·ai·环境变量·ci·nuitka·skill