我正在创建一个Login&我的学校使用Python的密码程序,我已经创建了许多验证的注册部分,它完全可以正常工作。登录部分部分工作。
登录部分有问题。它可以找到用户名和密码,但是它也可以找到以该首字母开头的密码,它可以让您登录帐户(bug)。例如,如果我输入ma或m,我的密码是“mat”,它会让我登录帐户。但好处是它不允许我使用其他字母登录。
PATH=("pass"+" "+username+".txt")
if os.path.isfile(PATH) and os.access(PATH, os.R_OK):
print ("Username does exist please enter password: ")
w = input("Password: ")
with open("pass"+" "+username+".txt") as f:
found = False
for line in f:
if w in line:
loginuser()
found = True
if not found:
print("Wrong password. Please re-enter")
login()
else:
print("Username not found.")
答案 0 :(得分:2)
替换此行,检查子字符串匹配
if w in line:
使用完整的字符串匹配
if w == line.strip():
你的字符串以'\ n'结尾,这就是你需要修剪它的原因。这也会删除字符串开头和结尾的空格,比如“mat \ n”会变成“mat”,所以要小心。
答案 1 :(得分:2)
这是因为你正在使用这一行
if w in line:
您正在检查该行的一部分是否包含输入,因此以下内容是正确的:
"w" in "password" -> True
"pass" in "password" -> True
"word" in "password" -> True
这当然不正确,你需要检查是否相等:
if w == line.strip():
应该做的工作
答案 2 :(得分:0)
行
if w in line:
测试输入'w'的任何字母是否在密码文本文件的行中。你需要像这样进行等价测试:
if line == w:
以便精确匹配记录用户,而不仅仅是一个或多个字母匹配。
答案 3 :(得分:0)
如果您将密码存储在单独的行中,为什么不直接比较它们。因此,如果w在线执行此操作而不是这样做: 如果w == line