设为首页 加入收藏

TOP

#Python #密码管理器 无需再记住密码,使用Python实现个人密码管理器(一)
2023-07-25 21:25:33 】 浏览:83
Tags:#Python 管理器 使用 Python

?本文在CSDN"彭_Yu的博客"同步发表

 目录

1.要点

2.运行原理

3.异或算法简介         

4.运行效果 

5.实现过程 

5.1文件结构

5.2建立数据库

5.3 Python代码 


?

编辑

注:程序实例可到文末下载 

1.要点

 

1.tkinter界面设计

2.SQLite数据库操作

3.字符串异或运算加密和解密

2.运行原理

1.用户需要记住一个统一的加解密密钥,对于各平台的密码,使用密钥字符串异或运算加密后存储到数据库,查询时使用同一个密钥进行密钥字符串异或解密。

2.需要注意的是,由于代码采用的是异或算法,所以密码字符串和密钥字符串不应有对应位置上相同的字符。

3.由于代码采用的是异或算法所以并不安全,他人猜到的加解密密钥与正确密钥越相似,解密出的密码也就与正确密码越相似。你可以改写加密和解密算法,实现更高级别的密码保护。

3.异或算法简介         

       XOR 是 exclusive OR 的缩写。英语的 exclusive 意思是"专有的,独有的",可以理解为 XOR 是更单纯的 OR 运算。

  我们知道,OR 运算的运算子有两种情况,计算结果为true

(1)一个为 true,另一个为 false;
(2)两个都为 true。

       上面两种情况,有时候需要明确区分,所以引入了 XOR。

       XOR 排除了第二种情况,只有第一种情况(一个运算子为true,另一个为false)才会返回 true,所以可以看成是更单纯的 OR 运算。也就是说, XOR 主要用来判断两个值是否不同。

       XOR 一般使用插入符号(caret)^表示。如果约定0 为 false,1 为 true,那么 XOR 的运算真值表如下。

0 ^ 0 = 0
0 ^ 1 = 1
1 ^ 0 = 1
1 ^ 1 = 0

4.运行效果 

?
运行效果
编辑

5.实现过程 

5.1文件结构

/根目录
-MyPWD.exe(主程序)
-MyPWD.sqlite3(数据库文件)

5.2建立数据库

       在这里我们可以使用在线sqlite查看器:

在线sqlite查看器

       输入如下信息:

CREATE TABLE passwords (platform TEXT, pwd TEXT, id INTEGER PRIMARY KEY)

 

?
输入信息
编辑

         单击执行 sql>导出Sqlite数据库文件  并将文件重命名为 “MyPWD.sqlite3”  放入MyPWD.exe(主程序)所在目录。

?
单击执行  sql>导出Sqlite数据库文件
编辑
?
将文件重命名为 “MyPWD.sqlite3”  放入MyPWD.exe(主程序)所在目录
编辑

5.3 Python代码 

import sqlite3
import tkinter
from itertools import cycle
from tkinter.ttk import Combobox
from tkinter.messagebox import showinfo, showerror, askyesno
class DatabaseAccess:
    @staticmethod
    def doSql(sql):
        with sqlite3.connect('MyPWD.sqlite3') as conn:
            conn.execute(sql)
            conn.commit()
            
    @staticmethod
    def getData(sql):
        with sqlite3.connect('MyPWD.sqlite3') as conn:
            cur = conn.cursor()
            cur.execute(sql)
            return cur.fetchall()
root = tkinter.Tk()
root.geometry('350x250+400+300')
root.resizable(False, False)
root.title('(C)2022彭_Yu')
lbKey = tkinter.Label(root, text='密码数据库密钥:')
lbKey.place(x=10, y=10, width=100, height=20)
key = tkinter.StringVar(root, '')
entryKey = tkinter.Entry(root, textvariable=key, show='*')
entryKey.place(x=120, y=10, width=200, height=20)
lbPlatform = tkinter.Label(root, text='平台  名称:')
lbPlatform.place(x=10, y=40, width=100, height=20)
platformName = tkinter.StringVar(root, '')
entryPlatform = tkinter.Entry(root, textvariable=platformName)
entryPlatform.place(x=120, y=40, width=200, height=20)
lbPassword = tkinter.Label(root, text='设置  密码:')
lbPassword.place(x=10, y=70, width=100, height=20)
password = tkinter.StringVar(root, '')
entryPassword = tkinter.Entry(root, textvariable=password)
entryPassword.place(x=120, y=70, width=200, height=20)
def add_modify():
    if not (key.get() and platformName.get() and password.get()):
        showerror('出错',
                  '请同时输入密码数据库密钥、平台名称、密码.\n注意:密钥不要随意更改.')
        return
    if key.get().isdigit():
        showerror('密钥安全性出错', '为了您的密钥安全,不能使用纯数字作为密钥')
        return
    if sum(map(lambda x,y: x==y, password.get(), key.get())) > 0:
        showerror('密钥安全性出错', '密码不合适,为了您的密钥安
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Python教程:selenium模块用法教程 下一篇Python装饰器实例讲解(一)

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目