Advertisement
gruntfutuk

password_functions

Oct 30th, 2022 (edited)
725
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.10 KB | Source Code | 0 0
  1. import hashlib
  2. import logging
  3. from random import choice, randint, shuffle
  4. from string import digits, ascii_lowercase, ascii_uppercase, ascii_letters
  5.  
  6.  
  7. def is_hashlike(string: str):
  8.     ' check if string is all hex and likely a hashed pasword'
  9.     try:
  10.         int(string, 16)
  11.         return True
  12.     except ValueError:
  13.         return False
  14.  
  15.  
  16. def hash_password(password):
  17.     if is_hashlike(password):  # don't rehash likely hashed password
  18.         return password
  19.     hashed = hashlib.sha256(password.encode())
  20.     logging.info(f"\n\thashed {password}\n\tto     {hashed.hexdigest()}")
  21.     return hashed.hexdigest()
  22.  
  23. def check_password(plain_password, employee_password):
  24.     hashed_password = hash_password(plain_password)
  25.     return hashed_password == employee_password
  26.  
  27.  
  28. def password_bad(password):
  29.     return password in BAD_PASSWORDS or (is_hashlike(password) and password in BAD_HASHED_PASSWORDS)
  30.  
  31.  
  32. def generate_password(size=16):
  33.     limit = min(3, max(1, size//5))
  34.     specials = [choice(PUNCTUTATION) for _ in range(randint(1, limit))]
  35.     nums = [choice(digits) for _ in range(randint(1, 4))]
  36.     lowers = [choice(ascii_lowercase) for _ in range(randint(1, limit))]
  37.     uppers = [choice(ascii_uppercase) for _ in range(randint(1, limit))]
  38.     password = specials + nums + lowers + uppers
  39.     shuffle(password)
  40.     password = [choice(ascii_letters)] + password
  41.     if len(password) >= size:
  42.         password = password[:size]
  43.     else:
  44.         password.extend([choice(ascii_letters) for _ in range(size - len(password))])
  45.     logging.info(f'\n\tpassword generated: {"".join(password)}')
  46.     return ''.join(password[:size])
  47.  
  48.  
  49.  
  50. logging.basicConfig(filename='password_func.log', filemode='a',
  51.                     format='%(asctime)s - %(message)s',
  52.                     level=logging.INFO)
  53.  
  54. logging.info('imported/run')
  55.  
  56. DEFAULT_PASSWORD = 'password'
  57. BAD_PASSWORDS = (DEFAULT_PASSWORD, "", 'Password', 'Passw0rd',
  58.                  'password1', 'passw0rd1', 'Passw0rd1')
  59. BAD_HASHED_PASSWORDS = [hash_password(p) for p in BAD_PASSWORDS]
  60. PUNCTUTATION = r'!#$%&\()*+-/:;<=>?@[\\]^_`{|}~'
  61.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement