zoukankan      html  css  js  c++  java
  • 简单的密码管理器(Python)(待完善)

    需要使用的库:pymssql(用于连接SQL Server), PyQt5(用于窗口的制作)

    首先编写DOS界面的密码生成器,以及将程序与数据库相连接,用于存储和查询

    PasswordDOS.py

     1 from random import randint
     2 import pymssql
     3 
     4 
     5 def connect_to_sql():
     6     print('连接中...')
     7     connect = pymssql.connect('(local)', 'sa', '123456789', 'Password')
     8     if connect:
     9         print('连接成功...')
    10     else:
    11         print('未连接')
    12         exit()
    13     return connect
    14 
    15 
    16 def rand_password():
    17     whole_char = r'abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ._!@#$%^&*'
    18     char_number = len(whole_char)
    19     password_length = input('please input password lenght: ')
    20     password = []
    21     for _ in range(0, int(password_length)):
    22         password.append(whole_char[randint(0, char_number - 1)])
    23     return password
    24 
    25 
    26 def inquiry_password(cursor):
    27     name = input('please input password for use: ')
    28     if name == '':
    29         sql = r"select * from password"
    30     else:
    31         sql = r"select * from password where id ='" + name + "'"
    32     cursor.execute(sql)
    33     result = cursor.fetchall()
    34     if len(result) == 0:
    35         print('不存在该密码')
    36     else:
    37         for value in result:
    38             print(value[0]+'的密码是:'+value[1])
    39 
    40 
    41 def add_password(connect, cursor):
    42     name = input('please input password for use: ')
    43     pwd = input('please input password: ')
    44     if pwd == '':
    45         pwd = ''.join(rand_password())
    46     sql = r"insert into password values('" + name + "', '" + pwd + "')"
    47     cursor.execute(sql)
    48     connect.commit()
    49     print(name + '的密码是:' + pwd)
    50 
    51 
    52 def delete_password(connect, cursor):
    53     name = input('please input password for use: ')
    54     sql = r"delete from password where id='" + name + "'"
    55     cursor.execute(sql)
    56     connect.commit()
    57 
    58 
    59 def change_password(connect, cursor):
    60     name = input('please input password for use: ')
    61     pwd = input('please input password: ')
    62     if pwd == '':
    63         pwd = ''.join(rand_password())
    64     sql = r"update password set pwd='" + pwd + "'where id='" + name + "'"
    65     cursor.execute(sql)
    66     connect.commit()
    67     print(name + '的密码是:' + pwd)
    68 
    69 
    70 def run():
    71     connect = connect_to_sql()
    72     cursor = connect.cursor()
    73     while True:
    74         flag = input('please input (A/D/C/I/E{add,delete,change,inquiry,exit}): ')
    75         if flag == 'A' or flag == 'a':
    76             add_password(connect, cursor)
    77         elif flag == 'D' or flag == 'd':
    78             delete_password(connect, cursor)
    79         elif flag == 'C' or flag == 'c':
    80             change_password(connect, cursor)
    81         elif flag == 'I' or flag == 'i':
    82             inquiry_password(cursor)
    83         elif flag == 'E' or flag == 'e':
    84             break
    85     connect.close()
    86 
    87 
    88 if __name__ == '__main__':
    89     run()

    将DOS界面的程序进行稍微修改,用于窗口界面的导入文件

    password.py

      1 from random import randint
      2 import pymssql
      3 
      4 
      5 def connect_to_sql():
      6     print('连接中...')
      7     connect = pymssql.connect('(local)', 'sa', '123456789', 'Password')
      8     if connect:
      9         print('连接成功')
     10     else:
     11         print('未连接')
     12         exit()
     13     return connect
     14 
     15 
     16 def rand_password(password_length):
     17     whole_char = r'abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ._!@#$%^&*'
     18     char_number = len(whole_char)
     19     # password_length = input('please input password lenght: ')
     20     password = []
     21     for _ in range(0, int(password_length)):
     22         password.append(whole_char[randint(0, char_number - 1)])
     23     return password
     24 
     25 
     26 def inquiry_password(cursor, name):
     27     # name = input('please input password for use: ')
     28     if name == 'all' or name == 'ALL':
     29         sql = r"select * from password"
     30     elif name == '':
     31         return '请输入账号'
     32     else:
     33         sql = r"select * from password where id ='" + name + "'"
     34     cursor.execute(sql)
     35     result = cursor.fetchall()
     36     if len(result) == 0:
     37         # print('不存在该密码')
     38         return '不存在该密码'
     39     else:
     40         _: str = ''
     41         for value in result:
     42             # print(value[0]+'的密码是:'+value[1])
     43             _ += value[0]+'的密码是:'+value[1]+'
    '
     44         return _
     45 
     46 
     47 def add_password(connect, cursor, name, pwd, length=16):
     48     # name = input('please input password for use: ')
     49     # pwd = input('please input password: ')
     50     if pwd == '':
     51         pwd = ''.join(rand_password(length))
     52     sql = r"select id from password where id = '" + name + "'"
     53     cursor.execute(sql)
     54     PasswordId = cursor.fetchone()
     55     if PasswordId == (name, ):
     56             return '密码已存在,请使用修改'
     57     sql = r"insert into password values('" + name + "', '" + pwd + "')"
     58     cursor.execute(sql)
     59     connect.commit()
     60     # print(name + '的密码是:' + pwd)
     61     result = name + '的密码是:' + pwd
     62     return result
     63 
     64 
     65 def delete_password(connect, cursor, name):
     66     # name = input('please input password for use: ')
     67     if name == '':
     68         return '请输入账号'
     69     sql = r"select id from password where id = '" + name + "'"
     70     cursor.execute(sql)
     71     PasswordId = cursor.fetchone()
     72     if PasswordId is None:
     73         return '不存在' + name + '账号'
     74     sql = r"delete from password where id='" + name + "'"
     75     cursor.execute(sql)
     76     connect.commit()
     77     return '已删除' + name + '账号'
     78 
     79 
     80 def change_password(connect, cursor, name, pwd, length=16):
     81     # name = input('please input password for use: ')
     82     # pwd = input('please input password: ')
     83     if pwd == '':
     84         pwd = ''.join(rand_password(length))
     85     sql = r"update password set pwd='" + pwd + "'where id='" + name + "'"
     86     cursor.execute(sql)
     87     connect.commit()
     88     # print(name + '的密码是:' + pwd)
     89     result = name + '的密码是:' + pwd
     90     return result
     91 
     92 
     93 # noinspection PyArgumentList
     94 def run():
     95     connect = connect_to_sql()
     96     cursor: connect.cursor = connect.cursor()
     97     while True:
     98         flag = input('please input (A/D/C/I/E{add,delete,change,inquiry,exit}): ')
     99         if flag == 'A' or flag == 'a':
    100             add_password(connect, cursor)
    101         elif flag == 'D' or flag == 'd':
    102             delete_password(connect, cursor)
    103         elif flag == 'C' or flag == 'c':
    104             change_password(connect, cursor)
    105         elif flag == 'I' or flag == 'i':
    106             inquiry_password(cursor)
    107         elif flag == 'E' or flag == 'e':
    108             break
    109     connect.close()
    110 
    111 
    112 if __name__ == '__main__':
    113     run()

    使用PyQt5库编写窗口程序

    IPassword.py

      1 # import os
      2 import sys
      3 from PyQt5.QtGui import QIcon, QFont
      4 from PyQt5.QtWidgets import QApplication, QWidget, QToolTip, QDesktopWidget, QLabel, QLineEdit, QPushButton,
      5     QVBoxLayout, QHBoxLayout, QTextEdit
      6 from password import *
      7 
      8 
      9 class Window(QWidget):
     10     def __init__(self, **kwargs):
     11         # noinspection PyArgumentList
     12         super().__init__()
     13         self.Label = []
     14         self.LineEdit = []
     15         self.Button = []
     16         self.TextEdit = []
     17         self.connect = kwargs['connect']
     18         self.cursor = kwargs['cursor']
     19         self.initUi()
     20         self.setFixedSize(self.width(), self.height())  # 固定窗口的大小为其初始大小
     21 
     22     # noinspection PyArgumentList
     23     def initUi(self):
     24         # noinspection PyCallByClass
     25         QToolTip.setFont(QFont("SansSerif", 10))
     26         self.resize(240, 360)
     27         self.frameGeometry().moveCenter(QDesktopWidget().availableGeometry().center())
     28         self.setWindowTitle("IPassword")
     29         self.setWindowIcon(QIcon(r"src/IPassword.svg"))
     30         self.Label.append(QLabel(self))
     31         self.Label[0].setText('账  号:')
     32         self.Label.append(QLabel(self))
     33         self.Label[1].setText('密  码:')
     34         self.LineEdit.append(QLineEdit())
     35         self.LineEdit[0].setText('')
     36         self.LineEdit.append(QLineEdit())
     37         self.LineEdit[1].setText('')
     38         # self.LineEdit[0].setHidden(True)
     39         # self.LineEdit[0].setVisible(False)
     40         self.Button.append(QPushButton('增加', self))
     41         self.Button.append(QPushButton('删除', self))
     42         self.Button.append(QPushButton('修改', self))
     43         self.Button.append(QPushButton('查询', self))
     44         self.Button[0].clicked.connect(lambda: self.addInfo())
     45         self.Button[1].clicked.connect(lambda: self.deleteInfo())
     46         self.Button[2].clicked.connect(lambda: self.changeInfo())
     47         self.Button[3].clicked.connect(lambda: self.getInfo())
     48         self.TextEdit.append(QTextEdit(self))
     49         self.TextEdit[0].setPlainText('......')
     50 
     51         hbox1 = QHBoxLayout()
     52         hbox1.addWidget(self.Label[0])
     53         hbox1.addStretch(1)
     54         hbox1.addWidget(self.LineEdit[0])
     55         hbox2 = QHBoxLayout()
     56         hbox2.addWidget(self.Label[1])
     57         hbox2.addStretch(1)
     58         hbox2.addWidget(self.LineEdit[1])
     59         hbox3 = QHBoxLayout()
     60         hbox3.addWidget(self.TextEdit[0])
     61         hbox4 = QHBoxLayout()
     62         hbox4.addWidget(self.Button[0])
     63         hbox4.addWidget(self.Button[1])
     64         hbox5 = QHBoxLayout()
     65         hbox5.addWidget(self.Button[2])
     66         hbox5.addWidget(self.Button[3])
     67 
     68         vbox = QVBoxLayout()
     69         vbox.addLayout(hbox1)
     70         vbox.addLayout(hbox2)
     71         vbox.addLayout(hbox3)
     72         vbox.addLayout(hbox4)
     73         vbox.addLayout(hbox5)
     74 
     75         self.setLayout(vbox)
     76         self.show()
     77 
     78     def addInfo(self):
     79         PasswordInfo = add_password(self.connect, self.cursor, self.LineEdit[0].text(), self.LineEdit[1].text())
     80         self.LineEdit[0].setText('')
     81         self.LineEdit[1].setText('')
     82         self.TextEdit[0].setPlainText(PasswordInfo)
     83 
     84     def deleteInfo(self):
     85         PasswordInfo = delete_password(self.connect, self.cursor, self.LineEdit[0].text())
     86         self.LineEdit[0].setText('')
     87         self.LineEdit[1].setText('')
     88         self.TextEdit[0].setPlainText(PasswordInfo)
     89 
     90     def changeInfo(self):
     91         PasswordInfo = change_password(self.connect, self.cursor, self.LineEdit[0].text(), self.LineEdit[1].text())
     92         self.LineEdit[0].setText('')
     93         self.LineEdit[1].setText('')
     94         self.TextEdit[0].setPlainText(PasswordInfo)
     95 
     96     def getInfo(self):
     97         PasswordInfo = inquiry_password(self.cursor, self.LineEdit[0].text())
     98         self.LineEdit[0].setText('')
     99         self.LineEdit[1].setText('')
    100         self.TextEdit[0].setPlainText(PasswordInfo)
    101 
    102     def closeEvent(self, CloseEvent):
    103         print('断开中...')
    104         self.connect.close()
    105         print('已断开')
    106         print('关闭中...')
    107         CloseEvent.accept()
    108 
    109 
    110 def run():
    111     print('启动中...')
    112     connect = connect_to_sql()
    113     cursor = connect.cursor()
    114     application = QApplication(sys.argv)
    115     _ = Window(connect=connect, cursor=cursor)
    116     print('启动成功')
    117     try:
    118         sys.exit(application.exec())
    119     except SystemExit as _:
    120         print('退出成功')
    121 
    122 
    123 if __name__ == '__main__':
    124     run()

    暂时可以实现密码的生成、存储、修改、查询、删除的功能。

    时间:2019-08-20
    状态:未完成(半成品)
    作者:Wzz
    
  • 相关阅读:
    Oracle 11g导出空表
    如何破解ROS路由器禁用路由PPPOE拨号?
    Oracle入门心得(2)
    ORACLE了局,每天10问(五)
    若何消除Oracle数据库的安静隐患(3)
    Oracle入门心得(1)
    ORACLE用户自定义备份与恢复条记
    ORACLE成绩,每天10问(三)
    ORACLE问题,每天10问(一)
    怎样消除Oracle数据库的安全隐患(1)
  • 原文地址:https://www.cnblogs.com/wzzdeblog/p/11384541.html
Copyright © 2011-2022 走看看