mirror of
https://github.com/TheAlgorithms/Python.git
synced 2024-11-30 16:31:08 +00:00
Update password_generator.py (#7745)
* Update password_generator.py 1. Use secrets module instead of random for passwords as it gives a secure source of randomness 2. Add type annotations for functions 3. Replace ctbi (variable for the characters to be included) with a more meaningful and short name 4. Use integer division instead of obtaining the integer part of a division computing a floating point * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
This commit is contained in:
parent
b0f68a0248
commit
18ffc4dec8
|
@ -1,9 +1,10 @@
|
||||||
"""Password Generator allows you to generate a random password of length N."""
|
"""Password Generator allows you to generate a random password of length N."""
|
||||||
from random import choice, shuffle
|
import secrets
|
||||||
|
from random import shuffle
|
||||||
from string import ascii_letters, digits, punctuation
|
from string import ascii_letters, digits, punctuation
|
||||||
|
|
||||||
|
|
||||||
def password_generator(length=8):
|
def password_generator(length: int = 8) -> str:
|
||||||
"""
|
"""
|
||||||
>>> len(password_generator())
|
>>> len(password_generator())
|
||||||
8
|
8
|
||||||
|
@ -17,58 +18,59 @@ def password_generator(length=8):
|
||||||
0
|
0
|
||||||
"""
|
"""
|
||||||
chars = ascii_letters + digits + punctuation
|
chars = ascii_letters + digits + punctuation
|
||||||
return "".join(choice(chars) for x in range(length))
|
return "".join(secrets.choice(chars) for _ in range(length))
|
||||||
|
|
||||||
|
|
||||||
# ALTERNATIVE METHODS
|
# ALTERNATIVE METHODS
|
||||||
# ctbi= characters that must be in password
|
# chars_incl= characters that must be in password
|
||||||
# i= how many letters or characters the password length will be
|
# i= how many letters or characters the password length will be
|
||||||
def alternative_password_generator(ctbi, i):
|
def alternative_password_generator(chars_incl: str, i: int) -> str:
|
||||||
# Password Generator = full boot with random_number, random_letters, and
|
# Password Generator = full boot with random_number, random_letters, and
|
||||||
# random_character FUNCTIONS
|
# random_character FUNCTIONS
|
||||||
# Put your code here...
|
# Put your code here...
|
||||||
i = i - len(ctbi)
|
i -= len(chars_incl)
|
||||||
quotient = int(i / 3)
|
quotient = i // 3
|
||||||
remainder = i % 3
|
remainder = i % 3
|
||||||
# chars = ctbi + random_letters(ascii_letters, i / 3 + remainder) +
|
# chars = chars_incl + random_letters(ascii_letters, i / 3 + remainder) +
|
||||||
# random_number(digits, i / 3) + random_characters(punctuation, i / 3)
|
# random_number(digits, i / 3) + random_characters(punctuation, i / 3)
|
||||||
chars = (
|
chars = (
|
||||||
ctbi
|
chars_incl
|
||||||
+ random(ascii_letters, quotient + remainder)
|
+ random(ascii_letters, quotient + remainder)
|
||||||
+ random(digits, quotient)
|
+ random(digits, quotient)
|
||||||
+ random(punctuation, quotient)
|
+ random(punctuation, quotient)
|
||||||
)
|
)
|
||||||
chars = list(chars)
|
list_of_chars = list(chars)
|
||||||
shuffle(chars)
|
shuffle(list_of_chars)
|
||||||
return "".join(chars)
|
return "".join(list_of_chars)
|
||||||
|
|
||||||
# random is a generalised function for letters, characters and numbers
|
# random is a generalised function for letters, characters and numbers
|
||||||
|
|
||||||
|
|
||||||
def random(ctbi, i):
|
def random(chars_incl: str, i: int) -> str:
|
||||||
return "".join(choice(ctbi) for x in range(i))
|
return "".join(secrets.choice(chars_incl) for _ in range(i))
|
||||||
|
|
||||||
|
|
||||||
def random_number(ctbi, i):
|
def random_number(chars_incl, i):
|
||||||
pass # Put your code here...
|
pass # Put your code here...
|
||||||
|
|
||||||
|
|
||||||
def random_letters(ctbi, i):
|
def random_letters(chars_incl, i):
|
||||||
pass # Put your code here...
|
pass # Put your code here...
|
||||||
|
|
||||||
|
|
||||||
def random_characters(ctbi, i):
|
def random_characters(chars_incl, i):
|
||||||
pass # Put your code here...
|
pass # Put your code here...
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
length = int(input("Please indicate the max length of your password: ").strip())
|
length = int(input("Please indicate the max length of your password: ").strip())
|
||||||
ctbi = input(
|
chars_incl = input(
|
||||||
"Please indicate the characters that must be in your password: "
|
"Please indicate the characters that must be in your password: "
|
||||||
).strip()
|
).strip()
|
||||||
print("Password generated:", password_generator(length))
|
print("Password generated:", password_generator(length))
|
||||||
print(
|
print(
|
||||||
"Alternative Password generated:", alternative_password_generator(ctbi, length)
|
"Alternative Password generated:",
|
||||||
|
alternative_password_generator(chars_incl, length),
|
||||||
)
|
)
|
||||||
print("[If you are thinking of using this passsword, You better save it.]")
|
print("[If you are thinking of using this passsword, You better save it.]")
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user