如何修复接受部分匹配密码的程序

时间:2018-01-21 17:02:01

标签: python

我正在创建一个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.")

4 个答案:

答案 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