forked from TheAlgorithms/Python
- Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpassword.py
97 lines (79 loc) · 3.01 KB
/
password.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
importsecrets
fromrandomimportshuffle
fromstringimportascii_letters, ascii_lowercase, ascii_uppercase, digits, punctuation
defpassword_generator(length: int=8) ->str:
"""
Password Generator allows you to generate a random password of length N.
>>> len(password_generator())
8
>>> len(password_generator(length=16))
16
>>> len(password_generator(257))
257
>>> len(password_generator(length=0))
0
>>> len(password_generator(-1))
0
"""
chars=ascii_letters+digits+punctuation
return"".join(secrets.choice(chars) for_inrange(length))
# ALTERNATIVE METHODS
# chars_incl= characters that must be in password
# i= how many letters or characters the password length will be
defalternative_password_generator(chars_incl: str, i: int) ->str:
# Password Generator = full boot with random_number, random_letters, and
# random_character FUNCTIONS
# Put your code here...
i-=len(chars_incl)
quotient=i//3
remainder=i%3
# chars = chars_incl + random_letters(ascii_letters, i / 3 + remainder) +
# random_number(digits, i / 3) + random_characters(punctuation, i / 3)
chars= (
chars_incl
+random(ascii_letters, quotient+remainder)
+random(digits, quotient)
+random(punctuation, quotient)
)
list_of_chars=list(chars)
shuffle(list_of_chars)
return"".join(list_of_chars)
# random is a generalised function for letters, characters and numbers
defrandom(chars_incl: str, i: int) ->str:
return"".join(secrets.choice(chars_incl) for_inrange(i))
defis_strong_password(password: str, min_length: int=8) ->bool:
"""
This will check whether a given password is strong or not. The password must be at
least as long as the provided minimum length, and it must contain at least 1
lowercase letter, 1 uppercase letter, 1 number and 1 special character.
>>> is_strong_password('Hwea7$2!')
True
>>> is_strong_password('Sh0r1')
False
>>> is_strong_password('Hello123')
False
>>> is_strong_password('Hello1238udfhiaf038fajdvjjf!jaiuFhkqi1')
True
>>> is_strong_password('0')
False
"""
iflen(password) <min_length:
returnFalse
upper=any(charinascii_uppercaseforcharinpassword)
lower=any(charinascii_lowercaseforcharinpassword)
num=any(charindigitsforcharinpassword)
spec_char=any(charinpunctuationforcharinpassword)
returnupperandlowerandnumandspec_char
defmain():
length=int(input("Please indicate the max length of your password: ").strip())
chars_incl=input(
"Please indicate the characters that must be in your password: "
).strip()
print("Password generated:", password_generator(length))
print(
"Alternative Password generated:",
alternative_password_generator(chars_incl, length),
)
print("[If you are thinking of using this password, You better save it.]")
if__name__=="__main__":
main()