【发布时间】:2008-12-01 03:31:45
【问题描述】:
首先,上下文:我正在尝试创建一个基于命令行的工具 (Linux) 需要登录。此工具上的帐户与此无关 系统级帐户——这些都不会查看 /etc/passwd。
我打算使用与 /etc/passwd 相同的格式(大致)将用户帐户存储在文本文件中。
尽管没有使用系统级密码文件,但似乎使用了 crypt 是一种使用的好习惯,而不是将密码存储在 明文。 (虽然 crypt 肯定比将密码存储在 明文,我愿意接受其他方式。)
我的地穴知识基于此: https://docs.python.org/2/library/crypt.html
文档似乎要求一些不可能的东西:“它 建议检查时使用完整的加密密码作为盐 密码。”
嗯?如果我正在创建加密密码(如创建用户时 记录)如何使用加密密码作为盐?它 还不存在。 (我假设您必须使用相同的盐来创建和检查密码。)
我尝试使用明文密码作为盐。这确实 工作,但有两个问题;一种容易克服,一种严重:
1) 明文密码的前两个字母包含在 加密密码。你可以通过不写前两个来解决这个问题 文件中的字符:
user_record = '%s:%s:%s' % (user_name, crypted_pw[2:], user_type)
2) 通过使用明文密码作为盐,您似乎是 减少系统中的熵。可能我是 误解了盐的用途。
我能够得出的最佳做法是使用前两个 用户名中的字符作为盐。这样合适吗 还是有什么我错过的东西让这一步变得糟糕?
我对盐的理解是它可以防止预计算密码 来自字典的哈希。我可以为所有人使用标准盐 密码(例如我的首字母“JS”),但这似乎不是一个 比使用每个用户的用户名中的两个字符对攻击者的负担更大。
【问题讨论】:
标签: python linux cryptography crypt