用python做一个密码箱小工具(已在本人github仓库可以看看)

注:因为本人经常记不住密码所以用python写了这个工具箱,并用pyinstaller这个第三方库打包成了exe文件。并附上exe下载地址和代码介绍与样式,本人能力有限希望勿喷。

下载地址:

https://github.com/suyihang15/password-manager/releases/download/v1.0.0/default.exe

项目地址

suyihang15/password-manager: python写的本地密码记录本

代码介绍:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#导入第三方库
import os
import json
import tkinter as tk
from tkinter import ttk, messagebox
from cryptography.fernet import Fernet

# 密钥文件名
KEY_FILE = "secret.key"
# 密码数据文件名
DATA_FILE = "passwords.json"

# 加载密钥,不存在则生成
def load_key():
if not os.path.exists(KEY_FILE):
key = Fernet.generate_key()
with open(KEY_FILE, "wb") as f:
f.write(key)
with open(KEY_FILE, "rb") as f:
return f.read()

# 初始化加密器
key = load_key()
cipher = Fernet(key)

# 保存数据(加密)
def save_data(data):
json_data = json.dumps(data).encode()
encrypted_data = cipher.encrypt(json_data)
with open(DATA_FILE, "wb") as f:
f.write(encrypted_data)

# 加载数据(解密)
def load_data():
if not os.path.exists(DATA_FILE):
return []
with open(DATA_FILE, "rb") as f:
encrypted_data = f.read()
decrypted_data = cipher.decrypt(encrypted_data).decode()
return json.loads(decrypted_data)

# 主窗口
root = tk.Tk()
root.title("密码记录本")
root.geometry("600x400")

# 表格
columns = ("网站", "账号", "密码", "备注")
tree = ttk.Treeview(root, columns=columns, show="headings")
for col in columns:
tree.heading(col, text=col)
tree.pack(fill=tk.BOTH, expand=True, padx=10, pady=10)

# 刷新表格
def refresh_list():
for item in tree.get_children():
tree.delete(item)
data = load_data()
for item in data:
tree.insert("", tk.END, values=(item["site"], item["user"], item["pwd"], item["note"]))

# 添加密码窗口
def add_window():
win = tk.Toplevel(root)
win.title("添加密码")
win.geometry("400x250")

tk.Label(win, text="网站/应用:").grid(row=0, column=0, padx=10, pady=10)
site_entry = tk.Entry(win)
site_entry.grid(row=0, column=1, padx=10, pady=10)

tk.Label(win, text="账号:").grid(row=1, column=0, padx=10, pady=10)
user_entry = tk.Entry(win)
user_entry.grid(row=1, column=1, padx=10, pady=10)

tk.Label(win, text="密码:").grid(row=2, column=0, padx=10, pady=10)
pwd_entry = tk.Entry(win)
pwd_entry.grid(row=2, column=1, padx=10, pady=10)

tk.Label(win, text="备注:").grid(row=3, column=0, padx=10, pady=10)
note_entry = tk.Entry(win)
note_entry.grid(row=3, column=1, padx=10, pady=10)

def save_new():
site = site_entry.get()
user = user_entry.get()
pwd = pwd_entry.get()
note = note_entry.get()
if not site or not user or not pwd:
messagebox.showwarning("提示", "网站、账号、密码不能为空!")
return
data = load_data()
data.append({"site": site, "user": user, "pwd": pwd, "note": note})
save_data(data)
refresh_list()
win.destroy()
messagebox.showinfo("成功", "保存成功!")

tk.Button(win, text="保存", command=save_new).grid(row=4, column=0, columnspan=2, pady=10)

# 删除选中
def delete_selected():
selected = tree.selection()
if not selected:
messagebox.showwarning("提示", "请先选择一条记录!")
return
data = load_data()
idx = tree.index(selected[0])
del data[idx]
save_data(data)
refresh_list()
messagebox.showinfo("成功", "删除成功!")

# 按钮
frame = tk.Frame(root)
frame.pack(pady=5)
tk.Button(frame, text="添加", command=add_window).pack(side=tk.LEFT, padx=5)
tk.Button(frame, text="删除选中", command=delete_selected).pack(side=tk.LEFT, padx=5)

# 启动
refresh_list()
root.mainloop()

启动后就是上面那个样子

添加保存以后就会在改文件夹里生成

passwords.json(作用:密码箱)

secret.key(作用:钥匙)

不能随便删除,删了数据就没了

成功以后打开软件就会以这样的方式呈现。

我个人觉得是很直观的,当然你也可以拿着这些代码随便改,反正都有注释的

要直接用源码的话,需要你自己配置环境

1、python 3.11

2、安装第三方库pip install cryptography(我个人是喜欢pycharm或者vs code的这两个IDE的,当然你要用文本文档也行,反正代码也不多,就是格式容易错)安装第三方库时有可能网络超时,就自己配镜像源吧

3、如果改好了可以打包了,个人推荐pyinstaller

(1)安装库pip install pyinstaller和pip install cryptography记得要把这个环境一起打包进去,不然运行不了

(2)打包pyinstaller -F -w –hidden-import=cryptography 文件名字.py

之后就生成一些文件里面就有exe文件,就可以直接拿来用了

希望对你有帮助,如果可以希望点一个star。