我正在为我的项目创建一个登录系统,我将用户名和密码存储在一个文本文件中,第一列中包含用户名,第二列中包含密码,然后用新行分隔每个登录名/密码并使用:
作为用户名/密码之间的障碍。
输入正确的用户名和密码后,我总是收到不正确的登录信息,但如果我只将用户名与正常运行的文件进行比较。即使我直接从文件中打印密码和用户名,然后将其打印在我输入的用户名/密码旁边,它仍然完全相同,但仍然说不正确的登录!
def login():
file=open("user.txt","r")
user=input("enter usename")
password=input("enter password")
Check=False
for line in file:
correct=line.split(":")
if user==correct[0] and password==correct[1]:
Check=True
break
if Check==True:
print("succesffuly logged in")
file.close()
mainMenu()
else:
print("incorrect log in")
file.close()
login()
答案 0 :(得分:5)
我怀疑每个用户/密码字符串末尾都有\n
。我在阅读后怀疑line
看起来像user:pass\n
。使用line.strip().split(':')
删除换行符,导致password==correct[1]
失败。
替换:
for line in file:
correct=line.split(":")
使用:
for line in file:
correct=line.strip().split(":")
为什么,请参阅https://docs.python.org/2/library/string.html#string.strip
string.strip(s[, chars])
返回删除了前导和尾随字符的字符串副本。如果省略
chars
或None
,则会删除空格字符。如果给定而不是None
,则chars
必须是字符串;字符串中的字符将从调用此方法的字符串的两端剥离。
答案 1 :(得分:2)
我们可以使用in
def login():
file = open("user.txt", "r")
user = input("enter usename ")
password = input("enter password ")
if ('{0}:{1}'.format(user, password)) in file:
print('yay')
else:
print('Boo !! User not found')
login()
如果您想使用for循环,我建议:
def login():
file = open("user.txt", "r")
user = input("enter usename ")
password = input("enter password ")
for line in file:
temp_user, temp_password = line.strip().split(':')
if temp_user == user and temp_password == password.strip():
print('yay')
else:
print('boo username and password not found!')
login()
非常重要,警告!
请采取必要的安全措施,因为此代码不提供任何安全措施,可能会利用很多漏洞。没有散列函数,Python本身不提供很多安全性,我建议使用getpass.getpass
解释HERE