【问题标题】:reading file problem with python username and passowrd recovery systempython用户名和密码恢复系统读取文件问题
【发布时间】:2019-06-18 15:12:26
【问题描述】:

这是一个恢复系统,用户可以在其中输入他们的唯一代码来恢复他们的详细信息。当输入唯一代码时,它会从文本文件中获取他们的详细信息,然后打印他们的用户名和密码。然后他们可以选择更改密码。我遇到的问题是,当我在其中输入旧密码时,它说密码不在该特定行中。文件中的格式是这样的:

(unique code) username: (username) password: (password)

global password1, password2,
check = True
while check:
    hash1=input("\n"+"Enter your unique code to recover your username or password ")
    with open("mount.txt","r") as file:
        for line in file:
            text = line.strip().split()
            if hash1 in text:
                print(line)
                check = False
                change = input("Do you want to change your password? [y,n]")
                while change not in('y', 'n'):
                    change = input("Do you want to change your password? [y,n]")
                if change == "y":
                    check = True
                    with open("mount.txt","r+") as file:
                        for line in file:
                            text = line.strip().split()
                            while check:
                                password1 = input("Enter old password ")
                                password2 = input("Enter new password ")
                                if len(password2) < 5:
                                    print("New password is too short")
                                elif password1 not in text:
                                    print("Old password is incorrect")
                                elif password1 in text:       
                                    s = open("mount.txt").read()
                                    s = s.replace(password1, password2)
                                    f = open("mount.txt", 'w')
                                    f.write(s)
                                    f.close()
                                    print("Password has been successfully changed")
                                    check = False

            elif len(hash1) < 32 and (check == True):
                print("Unique code not found please try again")
                break

因此,当我输入唯一代码时,它会显示正确的行,然后当我尝试更改密码时,它会一直说密码不在该特定行中。

【问题讨论】:

  • 不需要在开始时将这两个变量声明为全局变量。它们在函数之外。在函数之外的 Python 中使用 this 关键字没有任何意义,也没有任何作用。
  • @Torxed 哦好的,我会从我的代码中删除它
  • 另外,if password1 in text 意味着如果密码是Abcdefghijlk,我所要做的就是输入b,这将等于True。我猜这很糟糕。
  • @Torxed 这有点奇怪,因为我在文件Abcdefghijlk 中输入了密码,然后输入b 仍然显示旧密码不正确
  • @Torxed 你也知道如何解决这个问题吗?

标签: python python-3.x recovery


【解决方案1】:

目前,在循环文本文件中的行时,如果hash1不在ANY行,它会告诉你代码没有找到,并立即中断。

要解决这个问题,您应该从 if hash1 in text 条件语句内部中断或返回,然后测试 if len(hash1) &lt; 32 and (check == True),它现在只会在检查文件中的所有行之后运行。

另外,假设文本是 'aslhngbadf 用户名:bob 密码:alice',line.strip().split() 将是 ['aslhngbadf', 'username:', 'bob', 'password:', 'alice'],因此检查 password1 是否在 text 中对密码的一个字母不起作用。但是,如果您输入单词 'password:' 或 'bob'...,它将起作用,请检查内容是否明确匹配,如 if password1 == text[4]

最后,当您重新打开并遍历文件时,您会从文本匹配的行移回文件顶部。不要打开 mount.txt 两次。 text 仍然可用,并且与您第一次设置时一样保持不变。

【讨论】:

  • 感谢您的修复,但您知道如何解决更改密码的其他问题吗?
  • 查看我的编辑。添加了最后一段。您不必要地对文件进行了两次迭代,这意味着您在某行匹配 hash1,但随后开始检查密码,而不是该行,而是从文件顶部开始。
  • 它现在可以工作,因为我摆脱了额外的代码,但现在您可以更改该特定行中的任何内容,而不仅仅是密码
  • 再次检查password1 == text[4] 而不是in text。那么你只能改变那个确切的东西。我会说,你可能会遇到很多问题。如果两个人有相同的密码,你会同时改变他们,如果一个用户有相同的用户名和密码,他们都会改变,你有一些效率和安全问题。
猜你喜欢
  • 1970-01-01
  • 2018-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多