# 简单密码登录系统V0.3,功能:注册,登录和修改密码,操作成功返回1 # 新注册和修改密码必须输入两次密码,新注册的用户名不能与已有用户重复。 # 限制登录操作次数为3次。密码用md5加密存储。密码为强密码,输入回显为'*'
import hashlib import re def md5(arg): md5 = hashlib.md5(bytes("admin", encoding="utf-8")) md5.update(bytes(arg, encoding="utf-8")) return md5.hexdigest() def log(user,pwd): with open('passwd.txt', 'r') as f: for line in f: u = line.strip().split('|') if u[0] == md5(user) and u[1] == md5(pwd): return True def register(user,pwd): with open('passwd.txt', 'r+') as f: f.seek(0) t = md5(user) for line in f: u = line.strip().split('|') if t == u[0]: return False f.write(t+'|'+md5(pwd)+'\n') return True def modify(user,pwd): with open('passwd.txt', 'r') as f: lines = f.readlines() with open('passwd.txt', 'w') as wf: t = md5(user) for line in lines: u = line.strip().split('|') if t == u[0]: line = line.replace(u[1], md5(pwd)) wf.write(line) return True def pwd_input(msg): import msvcrt import sys if msg: print(msg, end='', flush=True) pw = [] while True: ch = msvcrt.getch() if ch == b'\r' or ch == b'\n': # 回车 print('') return b''.join(pw).decode() # 把pw转换为字符串返回 break elif ch == b'\x08': # 退格 if pw: pw.pop() msvcrt.putch(b'\b') msvcrt.putch(b' ') msvcrt.putch(b'\b') elif ch == b'\x1b' or ch == b'\x03': # ESC或者Ctrl+C break else: pw.append(ch) msvcrt.putch(b'*') return b''.join(pw).decode() def menu(i): if i == 1: count = 1 while count <= 3: user = input("请输入用户名:") pwd = pwd_input("请输入密码:") if user == '' or user.strip() == '' or pwd == '' or pwd.strip() == '': print("用户名,密码不能为空,请重新输入!") elif log(user, pwd): print("登录成功!") exit(1) else: print("用户名或密码不对,登录失败!") count += 1 if count == 4: print("密码输入次数过多!") exit(0) else: print("还有%d次尝试机会!" % (4 - count)) elif i == 2: while True: user = input("请输入用户名:") pwd1 = pwd_input("请输入密码:") pwd2 = pwd_input("请再次输入密码:") if user == '' or user.strip() == '' or pwd1 == '' or pwd1.strip() == ''\ or pwd2 == '' or pwd2.strip() == '': print("用户名,密码不能为空,请重新输入!") elif pwd1 != pwd2: print("两次输入的密码不同,请重新输入!") else: break p_match = re.match(r'.*(?=.{8,})(?=.*\d)(?=.*[a-zA-Z])(?=.*[~!@#$%^&*?]).*$', pwd1) if not p_match: print("密码必须为8位以上大小写字母、数字和符号的组合!") elif register(user, pwd1): print("注册成功!") exit(1) else: print("注册失败,该用户已存在!") elif i == 3: while True: user = input("请输入用户名:") pwd1 = pwd_input("请输入旧密码:") pwd2 = pwd_input("请输入新密码:") pwd3 = pwd_input("请再次输入新密码:") if user == '' or user.strip() == '' or pwd1 == '' or pwd1.strip() == ''\ or pwd2 == '' or pwd2.strip() == '' or pwd3 == '' or pwd3.strip() == '': print("用户名,密码不能为空,请重新输入!") elif log(user, pwd1): if pwd2 != pwd3: print("两次输入的密码不同,请重新输入!") else: break else: print("用户名或密码不对,请重新输入!") p_match = re.match(r'.*(?=.{8,})(?=.*\d)(?=.*[a-zA-Z])(?=.*[~!@#$%^&*?]).*$', pwd2) if not p_match: print("密码必须为8位以上大小写字母、数字和符号的组合!") else: modify(user, pwd2) print("密码修改成功!") exit(1) elif i == 0: print("谢谢使用,再见!") exit(0) else: print("输入错误,请重新输入") while True: i = input('****系统登录****\n' ' 0.退出\n' ' 1.登录\n' ' 2.注册\n' ' 3.修改密码\n' '**************\n' '请输入您的选择:') if i.isdigit(): menu(int(i)) else: print("输入错误,请重新输入")