0

我正在创建一个小系统,该人可以使用用户名和密码登录。然后,该代码将检查在同一行中包含用户名和密码的文本文件。

我不知道如何使这项工作思考。为什么基于包含详细信息的文本文件创建一个简单的登录系统如此复杂?我相信这是我的哲学是错误的,而不是实际的代码。

我使用了各种代码,如下所示:

with open('users/users.txt') as f:
    {int(k): v for line in f for (k, v) in (line.strip().split(None, 1),)}

这没有用。我究竟做错了什么?

4

1 回答 1

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。我不是散列方面的专家,但这将是一个不错的起点。

于 2013-09-08T04:07:17.287 回答