Создание приложения «Случайный пароль» на языке программирования Python

X Международный конкурс научно-исследовательских и творческих работ учащихся
Старт в науке

Создание приложения «Случайный пароль» на языке программирования Python

Уланов М.О. 1
1МАОУ Наро-Фоминская СОШ №3 СУИОП
Кузьмина А.А. 1
1МАОУ Наро-Фоминская СОШ №3 СУИОП
Автор работы награжден дипломом победителя I степени
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF

Введение

Часто в интернете при регистрации на различных сайтах, форумах, вконтакте, играх, майл.ру, wifi нас просят выбрать логин и пароль. С логином всё понятно, а как же быть с паролем? Использовать пароль в виде даты своего рождения или номера телефона не безопасно. Как же быть? Как защитить себя, чтобы больше никогда не думать о своей безопасности в сети. 

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

Актуальность темы проекта: Пароли создают реальную угрозу безопасности. Как показывают исследования, более 80% связанных со взломами утечек данных происходят из-за ненадежных или украденных паролей. Так что иметь под рукой свой личный генератор паролей не помешает.

Делая работу, я поставил перед собой цель: создать приложение «Случайный пароль» на языке программирования Python.

На основании цели мной поставлены задачи:

Дать краткую характеристику языку программирования Python и необходимым для работы модулям.

Дополнить свои знания о языке программирования Python, познакомившись со стандартными функциями и возможностями языка для создания приложений.

Рассмотреть какие существуют генераторы паролей.

Написать работающий код для генерирования паролей.

Предмет исследования: Код программы на языке Питон.

Теоретическая часть

Какие существуют генераторы паролей

Mail.Ru

В этом генераторе нет настроек длины пароля и вариантов символов, также нельзя выбрать количество паролей. Пользователю предлагают нажать кнопку «Сгенерировать пароль», и система показывает пароль из 12 случайных символов (прописные и строчные латинские буквы и спецсимволы). О способах генерации пароля не сообщается.

LastPass.com

Генератор паролей в онлайне от разработчиков менеджера паролей. Сайт генерирует один пароль длиной от одного до 50 символов. Пользователь может выбрать, какие символы будут использованы в пароле – прописные, строчные буквы, цифры и спецсимволы. Можно также указать предпочтения к паролю – использовать в нём любые символы или сделать его легко читаемым либо легко произносимым. Сведений о способе формирования пароля на сайте не найдено.

PassGen.RU

Сервис предлагает десять паролей длиной от шести до 64 символов. Пользователь может выбрать, какие символы будут входить в пароль, а также отметить параметр «Избегать повторяющиеся символы». По заявлениям разработчиков, сайт не ведёт учёт и не сохраняет сгенерированные пароли.

RandStuff.ru

Сервис генерации случайных последовательностей — чисел, паролей, номеров билетов и так далее. Настройки стандартные для многих онлайн-генераторов: можно включить в пароль цифры и спецсимволы, определить длину пароля (от шести до 16 символов). За раз генерируется один пароль.

Я привел лишь небольшую часть известных генераторов. Генераторов паролей огромное количество, возникает только один вопрос, безопасно ли их использовать?

Каким должен быть безопасный пароль?

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

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

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

Язык программирования Python

Язык программирования Python был создан в 1991 году голландцем Гвидо ванРоссумом. Свое имя Python или Питон получил от названия телесериала, а не пресмыкающегося.

Python – интерпретируемый язык программирования. Это значит, что исходный код частями преобразуется в машинный в процессе его чтения специальной программы – интерпретатором.

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

Python – это полноценный во многом универсальный язык программирования, используемый в различных сферах.

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

Необходимые библиотеки и модули

Модуль random. Предоставляет функции для генерации случайных чисел, букв, случайного выбора элементов последовательности.

random.randint(A, B) - случайное целое число N, A ≤ N ≤ B.

random.choice(sequence) - случайный элемент непустой последовательности.

random.shuffle(sequence, [rand]) - перемешивает последовательность (изменяется сама последовательность). Поэтому функция не работает для неизменяемых объектов.

random.sample(population, k) - список длиной k из последовательности population.

random.random() - случайное число от 0 до 1.

random.uniform(A, B) - случайное число с плавающей точкой, A ≤ N ≤ B (или B ≤ N ≤ A).

random.randrange (А,В) - возвращает случайное целое из диапазона.

random.paretovariate(alpha) - распределение Парето.

random.weibullvariate(alpha, beta) - распределение Вейбулла.

Рис.1 «Подключение Random»

Рис.2 «Получение случайного элемента из последовательности»

Списки. Списки в Python – упорядоченные изменяемые коллекции объектов произвольных типов (почти как массив, но типы могут отличаться). Чтобы использовать списки, их нужно создать. Создать список можно несколькими способами. Например, можно обработать любой итерируемый объект встроенной функцией list.

Рис.3 «Создание пустого списка»

Создать создали, теперь нужно со списком что-то делать. Для списков доступны основные встроенные функции, а также методы списков.

Таблица «Методы списков»

Метод

Что делает

list.append(x)

Добавляет элемент в конец списка

list.extend(L)

Расширяет список list, добавляя в конец все элементы списка L

list.insert(i, x)

Вставляет на i-ый элемент значение x

list.remove(x)

Удаляет первый элемент в списке, имеющий значение x. ValueError, если такого элемента не существует

list.pop([i])

Удаляет i-ый элемент и возвращает его. Если индекс не указан, удаляется последний элемент

list.index(x, [start [, end]])

Возвращает положение первого элемента со значением x (при этом поиск ведется от start до end)

list.count(x)

Возвращает количество элементов со значением x

list.sort([key=функция])

Сортирует список на основе функции

list.reverse()

Разворачивает список

list.copy()

Поверхностная копия списка

list.clear()

Очищает список

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

Рис. 4. «Добавление элемента в список»

Генераторы. Для создания списков, заполненных по более сложным формулам можно использовать генераторы: выражения, позволяющие заполнить список некоторой формулой. Общий вид генератора следующий: [выражение for переменная in последовательность]

Рис.5. «Применение генератора»

Модуль String. Модуль String можно импортировать для получения доступа к еще большим возможностям работы со строками. Некоторые функции модуля

ascii_lowercase = ​'abcdefghijklmnopqrstuvwxyz'

ascii_uppercase = ​'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

ascii_letters = ascii_lowercase + ascii_uppercase

digits = ​'0123456789'

punctuation = ​"""!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

Практическая часть

Случайный пароль из чисел и символов

Идея для проекта: создать надежные и случайные пароли с помощью собственного генератора.

Блок-схема

Коднаписанныйна Python

# This Python file uses the following encoding: utf-8

#подключимизбиблиотекимолудь random

import random

#создание списка цифр и их вывод

list_of_numbers = []

list_of_numbers = [str(i) for i inrange(10)]

print(list_of_numbers)

#создание списка буквы и их вывод

list_of_letters = ['q','w','e','r','t','y','u','i','o','p','a','s','d','f','g','h','j','k','l','z','x','c','v','b','n','m','Q','W',\

'E','R','T','Y','U','I','O','P','A', 'S','D','F','G','H','J','K','L','Z','X','C','V','B','N','M']

print(list_of_letters)

#создание списка букв по таблице ASCII и их вывод

letters_from_table = [chr(i) for i inrange(65, 91)] + [chr(i) for i inrange(97, 123)]

print(letters_from_table)

#получение случайного элемента из списка

import string

letters = string.ascii_letters

digits = string.digits

symbol = string.punctuation

str_elements = letters + digits + symbol

random_symbol = random.choice(string.punctuation)

list_of_elements = letters_from_table + list_of_numbers

#получение комбинации случайных элементов

length = 10

password_list = [random.choice(list_of_elements) for i in range(length)]

print(password_list)

#переписываем пароль строкой + добавим символ

password = ' '

for elem in password_list:

password = password + elem

print(password + random_symbol)

Результат:

Чем плох стандартный рандомный пароль? Сложно запомнить!

Случайный пароль с помощью собственного генератора

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

Код написанный на Python

import random

import string

password = ' '

adjectives = ['смешных', 'полосатых', 'маленьких', 'золотых', 'белых', 'радостных', 'медленных', 'бирюзовых']

nouns = ['слонов', 'бегемотов', 'крокодилов', 'обезьян', 'драконов', 'котиков', 'единорогов', 'черепах', 'лягушек']

verbs = ['бегут', 'летят', 'прыгают', 'читают', 'хрюкают', 'шипят']

print('Сколько паролей вы хотите сгенерировать?')

number_of_passwords = int(input())

for i inrange(number_of_passwords):

verb = random.choice(verbs)

noun = random.choice(nouns)

adjective = random.choice(adjectives)

number = str(random.randrange(2, 100))

symbol = random.choice(string.punctuation)

password =verb + number + adjective + noun + symbol

print('Вашпароль:' + " " + password)

Результат:

Можно использовать различные слова в своем собственном генераторе, данный пароль будет не сложно запомнить, но сложно взломать.

Заключение

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

Цель достигнута, поставленные задачи решены.

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

В дальнейшем планирую создавать приложения на различную тематику для помощи в учебе, например: «тест по математике для 7 класса», для этого конечно, мне необходимо будет усовершенствовать свои знания в программировании.

Список используемой литературы

Python для детей. Самоучитель по программированию / Джейсон Бриггс ; пер. с англ. Станислава Ломакина ; [науч. ред. Д. Абрамова]. — М.: Манн, Иванов и Фербер, 2017.

Python для детей и родителей. Играй и программируй / Джейсон Бриггс ; пер. с англ. Станислава Ломакина ; [науч. ред. Д. Абрамова]. — М.: Эксмо, 2019.

Импортирование модулей в Python https://python-scripts.com/import-modules-python

Язык программирования Python 3 для начинающих и чайников https://pythonworld.ru/

Подборка книг о языке Python для программистов любого уровня https://tproger.ru/books/free-python-books/

Бесплатные онлайн-игры, которые обучат вас программировать https://tproger.ru/digest/learn-to-code-while-playing-games/

Генераторы паролей: какие существуют и насколько безопасно их использовать https://vc.ru/services/48217-generatory-paroley-kakie-sushchestvuyut-i-naskolko-bezopasno-ih-ispolzovat

Просмотров работы: 3041