我正在创建一个小型系统,用户可以使用用户名和密码登录。然后,代码将检查包含同一行上的用户名和密码的文本文件。
我不知道如何让这项工作成为现实。为什么创建一个基于文本文件的简单登录系统并且其中包含详细信息会如此复杂?我认为这是我的哲学错误,而不是实际的代码。
我使用了以下各种代码:
with open('users/users.txt') as f:
{int(k): v for line in f for (k, v) in (line.strip().split(None, 1),)}
哪个没用。我做错了什么?
答案 0 :(得分:0)
我假设你有一个像这样布局的文本文件:
username1 password1
username2 password2
...
根据您从问题中收集的内容,您希望解析此文件并将结果存储在字典中(即用户名密钥映射到密码值)。这种东西更适合存储在数据库中(例如,SQLite内置于Python),所以你一定要学习数据库,而不是使用纯文本文件进行数据存储,尤其是用户帐户。
另外,您应该考虑如何使用散列等技术存储密码等敏感信息,但是当您想要进行下一步时,您可以考虑这些(我假设这是一个小小的学习项目,所以像数据库和散列这样的概念可能超出了你目前的范围,但绝对值得学习。
至于你的问题,你可以考虑做以下事情:
accounts = dict()
with open('users.txt') as f:
for account in f:
(usr, pwd) = account.strip().split()
accounts[usr] = pwd
print(accounts)
我认为代码清晰度比将它们保存在一行更重要!我所展示的代码并非详尽无遗,更像是指南。正如我之前所说的,我不建议你走这条路,所以一定要看看数据库和正确的密码存储技术!
在确保某种形式的安全性的同时,您可以做的是将密码存储为散列(即pwd将是散列)。然后,当用户将密码传递给系统时,您可以计算散列并检查散列是否相等。这比处理纯文本密码要好。 Python有一个内置的散列模块叫做hashlib。我不是哈希的专家,但这将是一个不错的起点。