Я понимаю, что ни один пароль не может быть взломан, но, учитывая количество ресурсов и времени, необходимых для взлома этих паролей, это будет довольно сложно.

Этот код является продолжением и расширением кода генератора паролей, который Йохан Годино сделал, чтобы попытаться создать генератор случайных чисел. Хотя это, безусловно, полезная программа, я попытался еще больше расширить проект, сделав проект более удобным для пользователя и сделав его таким, чтобы любой человек мог запомнить данный пароль. Ссылку на оригинальное видео генератора случайных паролей вы можете найти здесь.

Основная функциональность этой программы заключается в том, что она создает пароли из того, что вам нравится. Он попросит пользователя ввести 3 входа. Во-первых, ввод места, которое им нравится/в котором они побывали, затем 2 ввода слов, которые им нравятся.

Для начала вам нужно будет импортировать соответствующие библиотеки.

Для этого проекта есть две основные библиотеки, которые будут использоваться.

Random, встроенный в python и nltk, который является одной из лучших библиотек машинного обучения при работе с естественным языком. #

Вам необходимо установить nltk на свой компьютер, если он еще не встроен. Если так, беги

Пип установить нлтк

Это должно установить библиотеку. Поскольку в nltk не все данные, которые вам понадобятся, будут предварительно встроены, поэтому вам может потребоваться запустить

Nltk.download('omw-1.4')

Во-первых, мы должны определить некоторые локальные переменные, которые мы собираемся использовать:

Самой важной из них будет локальная переменная, известная как пароль. Здесь мы будем хранить строку символов, из которых состоит пароль.

Во-вторых, нам нужно установить переменный специальный символ, который содержит все специальные символы, которые мы будем использовать для разделения разных слов, составляющих пароль. Причина использования специальных символов заключается в том, что с точки зрения UX можно сделать слова более запоминающимися, так как если мы разделим слова на основе букв, это будет выглядеть как беспорядочные слова, которые могут сбить пользователя с толку. В худшем случае, если два слова объединятся, это может создать слово, которое уже существует, и может еще больше запутать пользователя.

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

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

Затем перешли к, пожалуй, самому сложному аспекту программы, в котором используется машинное обучение. Мы будем определять новую вложенную функцию; внутри этой функции мы хотим создать список. Затем вы хотите вызвать цикл Synset for для их любимого слова, которое они вводят. Synset является частью ветви машинного обучения NLP, но он находит синонимы для введенных слов, иногда у него будет только точное совпадение. В других случаях у этого слова может быть много синонимов. Затем я запустил вложенный цикл for, чтобы лемматизировать слова-синонимы.

что такое лемма

Лемма — это сокращение слова, чтобы вернуться к его основной форме. Отличным примером этого может быть слово «работает», а не «работает», что будет вводиться в список, так как «бег» является базовой формой «бега».

Как только вы это сделаете, все, что вам нужно сделать, это прикрепить выбранный синоним к паролю. Затем повторите процесс добавления другого синонима слова, введенного пользователем, и для последнего раздела добавьте двузначное число ближе к концу.

Результат:

Я думаю, что полезно измерить, насколько эффективны эти пароли, поэтому я проверил их через средство проверки надежности пароля, которое можно найти по адресу https://bitwarden.com/password-strength/. Все они вернулись как столетия, что, я думаю, достаточно хорошо, чтобы сказать, что эти пароли достаточно хороши на данный момент.

Я провел этот тест три раза

В первый раз мои входы были:

Стокгольм

Снег

Огонь

В результате получился пароль:

«»Стокгольм^^вести_за_носом%%завершить9

Второй раз я использовал входы:

Лондон

Футбол

Покер

В результате получился пароль:

^^лондон[[football_game@@poker56

Мой третий раз:

Берлин

Еда

Вечеринка

Третий результат:

«Берлин^^продовольственная››компания79

Как видите, эти пароли, как правило, хорошо запоминаются, но их легче запомнить, чем случайно сгенерированные пароли. Есть еще некоторые обновления, которые улучшат это, например, удаление точных совпадений. Но я оставлю это на ваше усмотрение в случае, если вы захотите принять вызов.

Это довольно простое использование машинного обучения с точки зрения НЛП, вы на самом деле не анализируете использование слов, но оно дает отличное понимание того, как вы можете использовать библиотеку, чтобы обеспечить интересные функции.

Если вы хотите бросить вызов или улучшить проект, вот несколько способов сделать это.

3 способа улучшить проект

1. Поменяйте местами слова и место, чтобы место не всегда было первым, а прикреплялось в случайном месте.

2. Переключите его, чтобы он стал более актуальным для пользователя, позволяя пользователю добавлять число, которое он считает важным для своей жизни, например, год рождения, год выпуска, а не какие-то случайно сгенерированные числа.

3. Сделать так, чтобы точные совпадения введенного слова не подставлялись в пароль.

Ссылку на GitHub можно найти здесь.

Полный код для этого:

from random import random
import nltk
from nltk.corpus import wordnet
import random
#you will need to download this data set if you do not already have it loaded as it does not come preinstalled with NLTK
#nltk.download('omw-1.4')
def password_generator():
password = ''
special_Characters  = '!"£$%^&*()[]:;@#~?<>'
divider = lambda x: random.choice(x)
doubler = lambda x: x + x
password = doubler(divider(special_Characters))
city = input('What is a city you like that you have visited?')
password = password + city + doubler(divider(special_Characters))
word1 = input('What is a word that you like (do not type a name) ')
def synonym(x):
synonym_list =[]
for syn in wordnet.synsets(x):
for lemm in syn.lemmas():
synonym_list.append(lemm.name())
return random.choice(synonym_list)
password = password + synonym(word1) + doubler(divider(special_Characters))
word2 = input('What is a second word that you like (do not type a name) ')
password = password + synonym(word2) + str(random.randint(0,99))
return print(password)
password_generator()