Дополнение, теперь генератор паролей опционально может использовать спецсимволы.

master
ssleg 2021-09-04 11:35:29 +03:00
parent 1130d49587
commit 7b8445ee47
Signed by: anton
GPG Key ID: 50F7E97F96C07ECF
2 changed files with 63 additions and 40 deletions

View File

@ -1,8 +1,10 @@
### Надежное хранилище паролей для параноиков.
Это программа с графическим интерфейсом, позволяет надежно сохранять все логины и пароли в одном месте.
Имеет кейген стойких, 16 символьных, алфавитно-цифровых паролей. Спецсимволы - опционально.
Наиболее часто используемые логины запоминаются и выдаются списком подстановок, при заполнении новых карточек.
Мастер-пароль **нигде не хранится**, ни в коде, ни в базе данных.
**ВНИМАНИЕ!** Мастер-пароль **нигде не хранится**, ни в коде, ни в базе данных.
Если вы его забудете, восстановить ваши записи будет **невозможно.**
База данных SQLite создается при первом запуске и задании мастер-пароля.

59
main.py
View File

@ -1,7 +1,7 @@
#!/usr/bin/env python3
# Key Master v1.00
# 27/08/2021
# Key Master v1.01
# 04/09/2021
# https://t.me/ssleg © 2021
import sqlite3
@ -173,7 +173,7 @@ class AllCards:
popular = []
for item in logins_count:
if item[0] > 1:
if item[0] > 2:
popular.append(item[1])
return popular
@ -195,6 +195,37 @@ class AllCards:
self.__cards.pop(index)
# генератор паролей
def pass_generator(species_flag=False):
species = '!@#$%^&*()-_+=;:,./?\\|`~[]{}^' + "'" + '"<>~.'
new_pass = ''
species_count = 0
for i in range(0, 16):
cycle_flag = False
if species_flag:
if species_count < 4:
probability = randint(0, 5)
if probability == 4:
index = randint(0, 34)
new_pass += species[index]
species_count += 1
cycle_flag = True
if not cycle_flag:
char_index = randint(0, 35)
if char_index > 9:
char_index += 55
capital = randint(0, 1)
if capital == 0:
new_pass += chr(char_index)
else:
new_pass += chr(char_index + 32)
else:
new_pass += str(char_index)
return new_pass
# окно первого входа и задания пароля
def system_init():
status = False
@ -316,6 +347,7 @@ def add_or_edit_card(used_list, popular_list, mode, name='', login='', password=
[Sg.InputCombo(popular_list, default_value=card_login, size=(41, 1))],
[Sg.Text('Пароль:')],
[Sg.InputText(card_password, size=(42, 1), border_width=3, key='pass')],
[Sg.Checkbox('Использовать спецсимволы в пароле', key='special')],
[Sg.Button('Ok'), Sg.Button('Отменить'), Sg.Button('Сгенерировать пароль')]]
if mode == 0:
window = Sg.Window("KeyMaster - новая карточка", layout, modal=True)
@ -347,19 +379,7 @@ def add_or_edit_card(used_list, popular_list, mode, name='', login='', password=
card_added = True
break
if event == 'Сгенерировать пароль':
new_pass = ''
for i in range(0, 16):
m = randint(0, 35)
if m > 9:
m += 55
m2 = randint(0, 1)
if m2 == 0:
new_pass += chr(m)
else:
new_pass += chr(m + 32)
else:
new_pass += str(m)
new_pass = pass_generator(values['special'])
window.Element('pass').Update(new_pass)
window.close()
@ -456,7 +476,8 @@ def main():
# начало исполнения кода.
if not path.exists('base.sqlite'):
if __name__ == '__main__':
if not path.exists('base.sqlite'):
login_status, master_key = system_init()
if login_status:
con = sqlite3.connect('base.sqlite')
@ -475,10 +496,10 @@ if not path.exists('base.sqlite'):
''')
con.commit()
pass_save = LoginCard(master_key, name='master_login', login='0', password='0')
else:
else:
con = sqlite3.connect('base.sqlite')
cursor = con.cursor()
login_status, master_key = system_login()
if login_status:
if login_status:
main()