Python使用tkinter写一个本地密码管理器
作者:nerkeler 发布时间:2022-09-19 13:05:53
详细代码见仓库
github
地址:github.com/nerkeler/account
重要提示
程序默认密码:password
密钥位置:./resource/aesKey
建议另存一份以作备份
修改点
本地密码导出中文乱码修复
引入日志记录
优化edge/chrome 浏览器导出适配管理
PS: 程序第一次打开关于页面显示不完整,如果遇到,请关闭后再打开
前言
闲来无事,看到自己有很多网站的账户密码,有些网站可能打开一两次也就忘记了,下一次在输入账户密码就想不起来,这样很容易丢失账号(当然也可以保存在浏览器自带的密码管理器中),虽然市面上也有很多优秀的账户密码管理软件,一来是这些程序大都是联网运行,在提供了多端存档的同时,也将密码和账户在网络上传输,虽然实际上很安全,但是并不是绝对的安全,二来,部分优秀的程序都是订阅付费机制,就想着自己干脆写个简单的本地的账户管理器,于是就有了这个小程序
先说一下优点吧,同市面上的程序比较,一个最突出的优点就是完全运行在本地,账户密码经过AES
加密,在逻辑上可以说是非常安全的,因为你的密码不会暴漏在网络上,本地也进行了加密处理。
当然缺点也很明显,一是功能不是十分完善,二是该程序使用tkinter
模块编写,在布局和界面展示上都显得十分简陋,好在基本的功能没有问题
使用说明
1.下载解压程序文件
2.运行account.exe
文件
3.点击新建账号
按钮添加新的账号密码信息
4.双击表格中的数据进行编辑或删除
5.点击导出
按钮验证密钥密码后将数据导出为CSV格式文件
6.点击导入
按钮选择CSV文件进行导入数据
7.可按需求导入并管理Chrome/Edge密码本
浏览器密码
登录
第一次登陆密钥弹出框被关闭时,就进入了程序的登录界面,默认账户名admin 不可修改,默认密码为 :password
,建议第一次登陆时修改密码
PS: 多用户功能尚未开发,因此账户名锁定不可编辑
修改密码
在登陆界面 点击 改密 进入修改密码界面,新密码要求字符数大于8位,点击确定 按钮即可进行密码修改,修改成功后会提示修改成功,重新登陆,如下图所示
chrome/edge浏览器密码导入管理
依次点击:
1.设置
2.自动填充
3.密码管理器
找到如图红框内容,验证设备密码后导出chrome密码本csv文件到本地
回到程序后点击导入
对应导入源后选择导入文件即可导入数据,单线程导入较慢,请耐心等待,快捷键暂未适配
主页面
主界面共分为两个区域:
一个是上方的功能区,提供了查询、查看、新增、删除(软删除)功能,
一个是下方的账户展示区域,默认打开时按照列表展示所有账户信息
相关操作
下拉框提供了 账户编号(对应下方序号列)、网站名称(对应下方网站列)、网站网址(对应下方网址列)查询条件转换
文本框接受 下拉框的对应字段,为空时默认查询所有
点击某一项账户时,点击查看/双击当前项 可进入当前账户查看界面,如图所示,当前页面也可以更新账户信息
新增按钮会弹出新增界面,按照规定指示填写字段即可新增一条记录
删除按钮 在点击某一项账户时,点击删除,即可删除当前记录(软删除,更改了当前的状态)
随机密码
可以按照自己的需求生成相应的密码规则,ABC
/123
/abc
/#$&
注:在密码长度>字符类型数的时候会补数字 如 密码长度选30 规则选abc
会在26个字符后再补几个数字构成随机字符
关于
聊胜于无,简单说一下,详细见程序页面
补充说明
忘记登陆账户密码时,可将account.db
文件使用数据库可视化工具打开,取出当前账户的相关信息和密码,根据密钥和加密逻辑解密当前账户的密码明文
加密逻辑如下:
import hashlib
from Crypto.Cipher import AES
def encode_password(password):
key = yourkey # key 表示你的密钥
slot = "nerkeler"
encode = key + slot
myKey = hashlib.md5(encode.encode("utf-8")).hexdigest().__str__()[:24]
return aes_encode(myKey, password)
def aes_decode(key, ciphertext):
# 将密钥填充到16的倍数
key = key + (16 - len(key) % 16) * '\0'
# 创建AES密码器对象
cipher = AES.new(key.encode(), AES.MODE_ECB)
# 解码Base64编码的密文
ciphertext = base64.b64decode(ciphertext)
# 解密
plaintext = cipher.decrypt(ciphertext)
# 去除填充字符
plaintext = plaintext.rstrip(b'\0')
return plaintext.decode()
来源:https://juejin.cn/post/7229965619570311227


猜你喜欢
- 一、背景python是一个动态语言,可以支持我们在运行时动态的给类、对象添加属性或者方法;但是如果我们想要限制可以添加的属性或方法该怎么办呢
- 见以下两个文件:showimage.asp Change the HTTP header
- 1、文件和文件组的含义与关系 每个数据库有一个主数据文件.和若干个从文件。文件是数据库的物理体现。 文件组可以包括分布在多个逻辑分区的文件,
- 代码如下:'个人代码风格注释(变量名中第一个小写字母表表示变量类型) 'i:为Integer型; 's:为Strin
- 2015年1月1日,新的一年开始之际,本来应该好好做点有意义的事情来跨个年的。结果, * 惯 - 睡觉之前一定要折腾一下电脑,说干就干,给新到
- 利用Python生成PDF文件时,对比了fpdf和reportlab两个库。fpdf最新更新还是2015年,另外reportlab的资料网上
- 一直都在网上抄别人写的电话,邮箱正则表达式,今天稍微有点闲情,把一直想自己写个这样的表达式的心愿给完成:/** * 邮箱地址正则表
- 1.简介和安装sysbench是一个开源的、模块化的、跨平台的多线程性能测试工具,可以用来进行CPU、内存、磁盘I/O、线程、数据库的性能测
- 无论是Windows、Linux、还是树莓派 。配置python3的opencv环境都是让人头大的一件事情,尤其是许多人用pip安装以后,发
- 一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字
- 本文主要介绍了python图片转为矢量图,分享给大家,具体如下:import numpy as npimport matplotlib.py
- 利用ASP从远程服务器上接收XML数据<% dim objXML dim objRootElement dim&n
- 在电子产品的设计中,大家经常提到简洁是设计的重要元素。可是很多产品,不见得简洁就是第一要素。简洁的设计,必须是在对用户需求透彻理解,引导用户
- 如下所示:import numpy as np三维数组arr1 = np.arange(16).reshape((2, 2, 4)) #[[
- 具体如何屏蔽更多的快捷键可以自行google搜索。 这里要说的是如何屏蔽后去执行自定义的事件。这里为了方便使用的Kibo做例子,使用goog
- 一般来说,函数(function)是组织好的、可重复使用的、具有一定功能的代码段。函数能提高应用的模块性和代码的重复利用率,在Python中
- 交互设计就是研究人与物体之间如何互动的问题,比如按电梯时,按钮立即高亮,同时屏幕上显示电梯现在所在楼层数,这个过程就是交互设计,而电梯按钮用
- CentOS6.9+Mysql5.7.18源码安装,以下操作均在root用户下执行。1、安装依赖工具cmake make3.75+ gcc4
- 最近做了一些小程序方面的性能优化,如分包加载,添加骨架屏等,这次主要说一下骨架屏的相关内容。关于骨架屏,有三种方法:1.直接请UI同学帮忙P
- python除法负数商的取整方式与C++不同python:5 / -2 = -3若想和C++行为相同,可以使用 int(operator.t