June 3, 2019

Генератор паролей с буфером обмена и оповещениями WIN

Начнём как обычно с импорта зависимостей. Т.К. эта статья для винды то и импортить мы будем либу для оповещений под винду.

import random
from win10toast import ToastNotifier
import pyperclip
from datetime import datetime
import keyboard

Установка:

pip install keyboard
pip install win10toast
pip install pyperclip

После установки всего необходимого мы создадим функцию генерации паролей:

def random4ik():
    pas = random.choice(list("1234567890abcdfghigklmnopqrstuvyxwzABCDFGHIGKMNOPQRSTUVYXWZ"))
    for x in range(36): 
        pas = pas + random.choice(list("!@#$%^&*()_+-1234567890abcdefghigklmnopqrstuvyxwzABCDEFGHIGKLMNOPQRSTUVYXWZ1234567890!@#$%^&*()_+-"))
    return pas

Итак, random.choice выберет первый символ нашего пароля, затем он передаст его дальше в цикл, в цикле мы будет складывать буквы по одной. то есть - каждый проход цикла будет добавлять один случайный символ к нашей строке. Символы вы можете заменить на свои, вставить символы которых нет на клавиатуре для более сложного пароля. По итогу функция нам возвращает рандомную строку размером - 36 символов.

Затем идёт функция которая записывает пароль в файл, добавляет в буфер обмена и выдаёт оповещение.

def pass_gen():
	f = open("pass_log.txt", "a")
	random_pass = random4ik()
	print(random_pass)
	pyperclip.copy(random_pass)
	toaster = ToastNotifier()
	toaster.show_toast("Пароль скопирован в буфер обмена", str(random_pass), icon_path="1.ico", duration=2)
	f.write(f"======== {str(datetime.now(tz=None))[:-7]} ========\n\n{random_pass}\n\n")
	return random_pass

Тут всё довольно таки просто. Сначала мы открываем файл на дозапись, чему соответствует атрибут "а", затем записываем нашу функцию рандома в переменную. Далее вы выводим наш рандомный пароль в консоль, далее с помощью pyperclip.copy мы заносим его в буфер обмена, затем создаем нотификатор (оповещение) что пароль был скопирован в буфер обмена и сам пароль. Так же - вы можете добавить свою иконку и длительность оповещения. Затем мы записываем это всё в файл и возвращаем рандомный пароль, это нам будет нужно для другой функции.

Выглядит нотификация вот так:

Иконку вы можете добавить свою. Как видите - принимает либа .ico файлы. Далее будет функция которую по сути можно было бы и не делать. Она будет вставлять за нас наш текст из буфера обмена.

def paste_pass(text):
	keyboard.write(text)

Она принимает в себя аргумент text, далее с помощью библиотеки keyboard она его печатает на клавиатуре.

Ну и самая главная функция:

if __name__ == '__main__':
	print("STARTED")
	keyboard.add_hotkey('Ctrl + 1', pass_gen)
	keyboard.add_hotkey('Ctrl + 2', lambda : paste_pass(pass_gen())) 
	keyboard.wait('Ctrl + Q')

Хотеки вы можете выставить свои, думаю тут не надо много объяснять, сначала выводим что программа запустилась, затем ждём сочетания клавишь, при нажатии на ctrl + Q программа закроется. Вы можете поменять хоткеи. При нажатии на ctrl + 1 будет сгенерирован пароль. При сочетании ctrl + 2 будет вызвана лямбда функция которая вставит наш пароль на место курсора.

Чутка больше про Лямба функции:

Информация с сайта : https://pythonworld.ru/tipy-dannyx-v-python/vse-o-funkciyax-i-ix-argumentax.html

Чуть не забыл, сам файл pass_log.txt:


Ну и полный листинг программы:

import random
from win10toast import ToastNotifier
import pyperclip
from datetime import datetime
import keyboard

def random4ik():
    pas = random.choice(list("1234567890abcdfghigklmnopqrstuvyxwzABCDFGHIGKMNOPQRSTUVYXWZ"))
    for x in range(36): 
        pas = pas + random.choice(list("!@#$%^&*()_+-1234567890abcdefghigklmnopqrstuvyxwzABCDEFGHIGKLMNOPQRSTUVYXWZ1234567890!@#$%^&*()_+-"))
    return pas

def pass_gen():
	f = open("pass_log.txt", "a")
	random_pass = random4ik()
	print(random_pass)
	pyperclip.copy(random_pass)
	toaster = ToastNotifier()
	toaster.show_toast("Пароль скопирован в буфер обмена", str(random_pass), icon_path="1.ico", duration=2)
	f.write(f"======== {str(datetime.now(tz=None))[:-7]} ========\n\n{random_pass}\n\n")
	return random_pass

def paste_pass(text):
	keyboard.write(text)

if __name__ == '__main__':
	print("STARTED")
	keyboard.add_hotkey('Ctrl + 1', pass_gen)
	keyboard.add_hotkey('Ctrl + 2', lambda : paste_pass(pass_gen())) 
	keyboard.wait('Ctrl + Q')
Мой код не идеален, я пишу костыли, вы всегда можете написать лучше и модифицировать мой код