【问题标题】:How to make Python remember permanently a variable or a list? (No Pickle!)如何让 Python 永久记住一个变量或一个列表? (没有泡菜!)
【发布时间】:2014-09-03 17:01:07
【问题描述】:

我编写了一个简单的程序,它会提示用户输入一些值,然后当用户再次与之交互时将这些值用作某种密码。

如何不使用 Pickle 永久存储该值?对于这么几行数据来说,数据库太大了。文本文件可能对可能的入侵者没有那么安全。

有没有办法以相对安全的方式永久存储数据?

【问题讨论】:

  • 首先不存储密码本身,而是存储密码的哈希值和盐。
  • 既然提到了hash,注意这里不是python__hash__,而是cryptographic hash(即安全hash)
  • 您是否考虑过使用 SQLite docs.python.org/2/library/sqlite3.html?它在大多数操作系统中默认可用,python 具有相同的内置模块。
  • 只是想知道你对泡菜有什么看法?

标签: python


【解决方案1】:

有几个选项可供考虑,最好的选项取决于您的项目范围。它是您和其他一些人使用的宠物项目,还是一些可公开访问的严肃内容?

文本文件

从外观上看,(文本)文件是最好的选择。使用适当的加密散列(SHA256 或更好)来散列密码并将其与用户名一起存储在文本文件中。

登录时,检查登录表单中的哈希密码和文本文件中的密码。

根据情况,您可能想查看 bcrypt/scrypt 的密码哈希。 确保文本文件位于网页的根目录之外,并且只能由需要它的进程读取/修改/写入。

小型数据库

或者你也可以使用数据库。 Sqlite 的开销非常低。您不是写入文本,而是写入一个仍然有 1 个文件大的数据库。

打开和更新文本文件所需的代码可能与 sqlite 连接一样大。 如果您使用某种框架,则可能有一个 ORM 具有对 Sqlite 连接的需求。如果您想升级到更大的数据库,这是理想的选择。

【讨论】:

  • 最后还是选择了sqlite,看起来很合身,没有想象中那么重!感谢大家的帮助!
猜你喜欢
  • 2020-11-16
  • 2014-03-15
  • 1970-01-01
  • 2020-08-26
  • 1970-01-01
  • 2019-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多