日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

密码管理器

發布時間:2023/12/8 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 密码管理器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

哎,年紀大了,記個密碼都費勁,每次輸入密碼都要輸入三四遍才能蒙對,以前將所有的密碼全都寫在一個txt中,今天居然忘記放在哪里了!!!,想不到我的記憶居然這樣侮辱我。身為程序員的這輩子都不可能忘記命令行的我于是寫一個密碼管理器。

本著以需求寫程序的原則,接下來說一下我們的需求:

1.創建密碼

2.徐改密碼

3.刪除密碼

4.查詢密碼

emmm,好像是廢話。細化一下

首先看一下我們都保存密碼的什么信息

用戶名:主角

密碼:主角

位置:用于何處

名字:給密碼起一個名字,比如都是騰訊的或者其他意義,之后再查找的時候更加快速

評論:可以說明一下這個密碼的作用

useful:代表這個密碼是有效的

創建一個表格式如下:

create table passaggregate(id int auto_increment,name varchar(20),position varchar(100),username varchar(50),pass varchar(40),useful int,remark varchar(200),primary key(id));

主鍵設置成自增模式

先看創建密碼形如這樣 (仿照docker 的命令行):

pass :代表調用密碼管理器,create :創建一個密碼,接下來還可以輸入很多參數基本都是對應數據表

-name:輸入改密碼的名字

-username:用戶名

-password:密碼

-position:密碼的位置

-remark:對密碼的評論

新建密碼默認可用所以 useful不用輸入

注意:這里的信息不一定填寫完整。

刪除密碼

這里的刪除密碼是偽刪除,考慮到個人密碼并不是很多,不想完全刪除,留作紀念。萬一真要刪錯,我可不想再去重新修改。

useful字段用于管理改密碼是否可用。

那么這里刪除可以看成對字段更改。那就很簡單了

刪除密碼的命令行如下(按照密碼的主鍵來進行刪除的,簡單粗暴):

查詢密碼

刪除密碼需要知道改密碼的主鍵值,所以這里有一個查詢操作四種形式,什么都不填,-a, -l, -al;

查詢所有可用的密碼:pass find

查詢所有的密碼:pass find -a

模糊查詢(作用于 name字段)pasa find -l zhang

模糊查詢所有的密碼(作用于name字段)pass find -al zhang

四種形式。

修改密碼

pass update <主鍵> [-name zhang] [-username xiao] [-password xiao] [-remark ok]

這里處理主鍵其他屬性都可以修改,可以單一修改也可屬性修改。

差不多現在整個程序要做的事情說的差不多了開始上程序了。

兩個文件。一個對數據的操作,根據字符串來判斷調用哪些操作

先看對數據庫的操作

增刪改查(collectPassword)

''' 用于密碼的錄入和顯示 1.密碼的錄入->數據庫 2.密碼的顯示->數據庫 3.刪除和添加密碼功能 4.對密碼的修改 '''import pymysql import sysdef linkDataBase():'''連接數據庫:return:'''username = "root"password = "xiaoliang123"db = pymysql.connect("localhost", username, password, 'mydata')cursor = db.cursor()return (db, cursor)def insertData(item):'''插入一條記錄item 屬于一個map類型的數據結構 里面的鍵值有 name position username pass useful=1 remark:param item::return:'''# 生成數據庫語句sql = "insert into passaggregate(name,position,username,pass,useful,remark) values('{}','{}','{}','{}','{}','{}')".format(item['name'], item['position'], item['username'], item['password'], item['useful'], item['remark'])# print(sql)db, cursor = linkDataBase()cursor.execute(sql)db.commit()cursor.close()db.close()def changData(item):'''更新數據庫:param item::return:'''sql = "update passaggregate set name='{}',position='{}',username='{}',pass='{}',useful='{}',remark='{}' where id={}".format(item[1], item[2], item[3], item[4], item[5], item[6], item[0])# print(sql)db, cursor = linkDataBase()cursor.execute(sql)db.commit()cursor.close()db.close()def searchAllData(useful=1):'''查找所有的數據:return:'''db, cursor = linkDataBase()if useful == 1:sql = "select* from passaggregate where useful=1"else:sql = "select*from passaggregate"cursor.execute(sql)data = cursor.fetchall()cursor.close()db.close()return datadef searchItemData(name, useful=1):'''根據用戶名來查找數據庫:param name::return:'''if useful == 1:sql = "select *from passaggregate where name like '%{}%' and useful=1".format(name)else:sql = "select *from passaggregate where name like '%{}%'".format(name)db, cursor = linkDataBase()cursor.execute(sql)data = cursor.fetchall()cursor.close()db.close()return datadef searchItemById(id):'''根據id來查找,內容:param id::return: 返回一個map值,可以直接用'''db, cursor = linkDataBase()sql = "select*from passaggregate where id='{}'".format(id)cursor.execute(sql)data = cursor.fetchone()# print(data)return list(data)

處理字符串的文件(pass.py)

from collectPassword import * import sys# 參數def createFunction(item):'''create 命令:param item::return:'''parameters = ['id', 'name', 'position', 'username', 'password', 'remark', 'useful']# print("createFunction:", item)keys = item[::2]values = item[1::2]if len(keys) != len(values):print("表達式錯誤")return Falseresult = {"name": "", "username": "", "password": "", "useful": "", "position": "", "remark": ""}for key, value in zip(keys, values):key = key.strip('-')if key not in parameters:print("表達式錯誤, 沒有{}".format(key))return False# print(key, ":", value)result[key] = valueresult['useful'] = 1insertData(result)print("創建成功")return Truedef findFunction(item):'''查找命令:param item::return:'''# print("findFunction:", item)# data = Noneif len(item) == 0:data = searchAllData()elif len(item) == 1 and item[0].strip("-") == 'a':data = searchAllData(0)elif len(item) == 2 and item[0].strip("-") == 'l':data = searchItemData(item[1])elif len(item) == 2 and item[0].strip("-") in ["al", "la"]:data = searchItemData(item[1], 0)else:print("表達式錯誤,沒有{}".format(item[0]))return Falsefor line in data:print(line)return Truedef rmFunction(item):'''刪除命令:param item::return:'''# print("rmFunction:", item)data = searchItemById(item[0])data[5] = 0changData(data)print("刪除成功")def updateFunction(item):'''更新命令:param item::return:'''paramters = ['name', 'position', 'username', 'password', 'useful', 'remark']# print("updateFunction:", item)data = searchItemById(item[0])keys = item[1::2]values = item[2::2]keyMap = {"name": 1, "position": 2, "username": 3, "password": 4, "useful": 5, "remark": 6}if len(keys) != len(values):print("表達式有誤")return Falsefor key, value in zip(keys, values):key = key.strip("-")if key not in paramters:print("沒有該參數:{}".format(key))return Falsedata[keyMap[key]] = valuechangData(data)print("更新成功")if __name__ == '__main__':# 命令commands = {'create': createFunction, 'find': findFunction, 'rm': rmFunction, 'update': updateFunction}item = sys.argvcommands[item[1]](item[2:])

通過pyinstaller工具,python的一個包pip install pyinstaller 即可 他可以將.py文件編譯成exe文件

cmd中輸入 :pyinstaller pass.py 即可,等待編譯。出現disk的文件夾里面的便是我們的要的程序移動到其他文件夾中。然后設置環境變量。最后可以想使用命令一樣的使用自己寫的程序。

不過話說回來這程序有點,菜的人不會用,強的人不屑用。。。。

不管怎么說反正目前對自己有用就行。以后如果還有什么需求再接著加吧。如果上面的程序有任何問題請及時的聯系我,我會給出答復。

總結

以上是生活随笔為你收集整理的密码管理器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。