Advertisement
fly51fly

gen_pass_v3

Nov 2nd, 2021
428
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.88 KB | None | 0 0
  1. import string
  2. import random
  3. import argparse
  4.  
  5. def evaluate_password(password, show_info=True):
  6.     result = False
  7.     password_state = 0b00000
  8.  
  9.     for char in password:
  10.         if char.isupper():
  11.             password_state |= 0b10000
  12.         elif char.islower():
  13.             password_state |= 0b01000
  14.         elif char.isdigit():
  15.             password_state |= 0b00100
  16.         else:
  17.             password_state |= 0b00010
  18.  
  19.     if len(password) >= 8:
  20.         password_state |= 0b00001
  21.    
  22.     #TODO:输出结果
  23.     if password_state == 0b11111:
  24.         if show_info:
  25.             print('密码符合要求!')
  26.         result = True
  27.     else:
  28.         if show_info:
  29.             prompt = '密码不符合要求,'
  30.             if password_state & 0b00001 == 0:
  31.                 prompt += '长度不足8,'
  32.             if password_state & 0b10000 == 0:
  33.                 prompt += '没有包含大写符号,'
  34.             if password_state & 0b01000 == 0:
  35.                 prompt += '没有包含小写符号,'
  36.             if password_state & 0b00100 == 0:
  37.                 prompt += '没包含数字,'
  38.             if password_state & 0b00010 == 0:
  39.                 prompt += '没包含标点,'
  40.             prompt = prompt[:-1]
  41.             print(prompt)
  42.     return result
  43.  
  44. def generate_password():
  45.     all_char_set = string.printable[:-6]
  46.     all_char_set *= 9
  47.     result = ''.join(random.sample(all_char_set, k=9))
  48.     return result
  49.  
  50. def create_password(pass_length, confuse=False):
  51.     result = ''
  52.     result += random.choice(string.ascii_uppercase)
  53.     result += random.choice(string.ascii_lowercase)
  54.     result += random.choice(string.digits)
  55.     result += random.choice(string.punctuation)
  56.     if confuse:
  57.         result += 'Il'
  58.         result += ''.join(random.sample(string.printable[:-6]*pass_length, pass_length-6))
  59.     else:
  60.         result += ''.join(random.sample(string.printable[:-6]*pass_length, pass_length-4))
  61.     result = ''.join(random.sample(result, len(result)))
  62.     return result
  63.  
  64. def main_userinput():
  65.     while 1:
  66.         user_password = input("请输入新密码:")
  67.         if evaluate_password(user_password):
  68.             break
  69.  
  70. def main_genpassword():
  71.     while 1:
  72.         user_password = generate_password()
  73.         if evaluate_password(user_password, show_info=False):
  74.             print(f"新生成密码为:{user_password}")
  75.             break
  76.  
  77. def main():
  78.     parser = argparse.ArgumentParser(description='Generate new password.')
  79.     parser.add_argument('-l', '--length', type=int, default=9,
  80.                         help='length of password (default: 9)')
  81.     parser.add_argument('-c', '--confuse', action='store_true',
  82.                         help='use confuse characters (I & l)')
  83.     args = parser.parse_args()
  84.  
  85.     for i in range(1):
  86.         print(f"新生成密码为:{create_password(args.length, args.confuse)}")
  87.  
  88. main()
  89.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement