Регулярные выражения python проверка пароля

Check the password strength in Python

Lets us see how to check the strength of the password in Python in this tutorial. Here in this tutorial, we are going to learn how to classify a password according to its strength.

Generally, we think of using functions (with isdigit(), islower(), isupper()), importing ascii_lower, ascii_upper, digits from string, importing packages like PasswordPolicy from password_strength and program accordingly.

Let us now do it in the simplest way…

To classify a password according to its strength

Now, let us do this using regular expressions .

So initially, a password must have 8 characters or more than that.
To have a strong password we must have a digit, a lowercase, an uppercase and a special character or else it is considered as weak .

Regular expression for a strong password

((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*]).) # regular expression to say the password is strong.

This is the regular expression for strong password.

(?=.*\d)” says that it must contain one digit similarly we say that for lowercase, uppercase and special characters.
Here ,” ” tells that its length is at least 8 characters and maximum of 30 characters.

R egular expression for weak password

((\d*)([a-z]*)([A-Z]*)([!@#$%^&*]*).) # regular expression to tell the password is weak.

This is the regular expression for weak password.

Here * indicates zero or more than that.

To use regular expressions we need to import re.

Let us have a look on code now.

import re v=input("Enter the password:") if(len(v)>=8): if(bool(re.match('((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*]).)',v))==True): print("The password is strong") elif(bool(re.match('((\d*)([a-z]*)([A-Z]*)([!@#$%^&*]*).)',v))==True): print("The password is weak") else: print("You have entered an invalid password.")

So, here in our code, we have used the Python len() to know the length of the entered string(input given by the user).
If the length of the string is more than 8 characters then only it is considered as a valid string.

Читайте также:  Xls to html python

re.match()

The “match()” is a function from module “re”. This function helps to match regular expressions with the string.
Here, in our code, the re.match() function is allowed to return a Boolean value because we are saying the re.match() to return Boolean by putting it in bool.
Generally, the re.match() function returns a match object on success and None on failure.

bool(re.match('((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*]).)',v) bool(re.match('((\d*)([a-z]*)([A-Z]*)([!@#$%^&*]*).)',v) # returns a boolean value.

Now, let us see the output.

Here are our three outputs.

Enter the password:man67 You have entered an invalid password.

From our code, it is understood that we are detecting whether a string contains digits, alphabets, special characters or not.
Here is the link for you to detect if a string contains special characters or not.

So we have learned how to check the password strength in Python with example.

One response to “Check the password strength in Python”

Write a program that checks the strength of a password. The password is strong if it has…
At least 1 letter between [a-z] and 1 letter between [A-Z]
At least 1 number between 8
At least 1 character from [!@#$%^&*]
Minimum length of 6 characters
Print out whether or not the password is strong by looping through each character of the password individually. Loop the whole program until the user inputs a password that is strong enough.

Источник

Как написать функцию для проверки надежности пароля на Python

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

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

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

  • длина 10 символов и более;
  • должен иметь хотя бы одно число;
  • должен иметь хотя бы одну букву в верхнем регистре;
  • должен иметь хотя бы одну букву в нижнем регистре;
  • пароль может содержать только латинские буквы.
Читайте также:  Задача на сортировку питон

Функция для проверки пароля будет принимать строку и возвращать False или True .

Начало положено! 😊 Двигаемся дальше.

Вариант 1.

Первое, что приходит в голову — использовать модуль re встроенной библиотеки модулей. С этого и начну.

Небольшое предостережение для тех, кто не знаком с этим модулем. Имейте терпение и все равно читайте! Дальше будет пример кода без импорта модулей.

Сначала нужно правильно сформулировать шаблон регулярного выражения. Это часто бывает труднее всего сделать. Для совпадений символов верхнего регистра соответствует регулярное выражение ‘[A-Z]’, нижнего регистра — «[a-z]», ну и числа — «4» или «\d». Напомню для тех, кто не помнит. Выражение в квадратных скобках, это квантификатор и означает один символ из диапазона что в скобках, \ d — сокращенная запись 6.

Имея регулярные выражения удовлетворяющие требования надежного пароля, написать нашу функцию не составит труда.

L = ( Len ( data ) > = 10 re . search ( r ‘[az]’ , data ) , re . search ( r ‘[AZ]’ , data ) , re . search ( r ‘\d’ , data ) )

Подробнее о работе функции.

L — кортеж, элементами которого являются:

len (data) > = 10 — выражение: размер входных данных больше или равен 10, логическое значение True или False;

re.search (pattern, string) — метод модуля re, параметрами которого является шаблон регулярного выражения и строка; ищет совпадения в строке с шаблоном регулярного выражения; возвращает объект или ничего.

all(L) функция all, аргументом которой является кортеж L, вернет True, когда каждый элемент аргумента будет иметь логическое True, иначе — False.

Тестирование.

Для тестирования работы функции необходимо записать входные данные, ожидаемый результат, и еще раз входные данные в кортеж. В цикле распаковываю кортеж, вызываю утверждение assert, которое проверяет условие на истинность. Если условие истинно, код работает дальше, если нет — генерирует ошибку на которую ссылается переменная m .

( ‘asasasasasasasaas’ , False , ‘asasasasasasasaas’ ) , ( ‘QWERTYqwerty’ , False , ‘QWERTYqwerty’ ) ,

И так, функция все тесты прошла успешно, можно отдыхать. Отдых — это полезно, но и о функции не забываем! Отдыхаем и думаем: как эту функцию можно еще оптимизировать?

Читайте также:  Plt python изменить размер

Опять тесты! Тесты! И еще раз тесты! Тестировать можно и так:Здесь логический оператор and вернет True, если выражения слева и справа от него будут истина, иначе — False. Выражение слева проверит пароль на количество знаков, выражение справа, через знакомую уже функцию all , проверит истинность каждого элемента генератора в круглых скобках.

Осталось только задокументировать функцию. Теперь модуль будет выглядеть так:

Вариант 2.

Воспользуюсь простой логикой. В каких случаях функция должна вернуть False ?

  1. Если входные данные содержат только цифры.
  2. Если входные данные содержат только буквы.
  3. Если входные данные в верхнем регистре.
  4. Если входные данные в нижнем регистре.
  5. Если длина входных данных меньше 10.

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

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

Аналогично еще один вариант:

Вариант 3.

В этом варианте логические значения условий пароля хранятся в кортеже на который ссылается переменная foo. Первый элемент foo содержит логическое значение условия длины пароля, все остальные — логические значения (функция any) объекта map, который в свою очередь содержит логические значения проверки каждого элемента data на принадлежность к цифрам, буквам нижнего или верхнего регистра. Все это делает функция map, через вызов функции lambda для каждого элемента data. Лямбда использует строчные методы проверки: isdigit() — ест ь ли это цифра, islower() — есть ли это буква в нижнем регистре, isupper() — или буква в верхнем регистре. Если объект map содержит хотя бы одно True, то функция map вернет True, иначе — False. Ну и функция all вернет True, если все элементы foo будут True (будут удовлетворять условиям надежного пароля), иначе — False.

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

Источник

Оцените статью