前言
几乎每个应用程序都需要某种形式的身份验证、密码处理或使用安全凭据,例如 API 密钥。您可能不是安全专家,但您应该知道如何安全地处理所有这些密码和凭据,以保护应用程序用户的凭据和数据以及您自己的 API 密钥和各种令牌。
确保这些安全元素的安全包括生成、验证它们、安全地存储它们并保护它们免受对手的侵害。因此,在本文中,我们将探索 Python 库、工具和概念,它们将对此有所帮助!
提示输入密码
让我们从简单开始 - 你有基本的 Python 应用程序与命令行界面。您需要向用户询问密码。您可以使用 input(),但这会在终端中显示密码,以避免您应该使用相反:getpass 是一个非常简单的包,允许您提示用户输入密码以及通过提取当前用户的登录名来获取他们的用户名。请注意,并非每个系统都支持隐藏密码。Python 会尝试警告你这一点,所以只需在命令行中阅读警告。
import getpass
user = getpass.getuser()
password = getpass.getpass(prompt='Enter password: ')
# Do Stuff...
注意: 在生产环境中,应防止时序攻击(Timing Attacks)。如果验证逻辑过早返回,攻击者可以通过测量响应时间来推断密码字符。建议使用恒定时间比较函数,如 hmac.compare_digest。
密码生成
有时,生成密码而不是提示用户输入密码可能更可取。例如,如果要设置首次登录时更改的初始密码。
没有任何用于生成密码的库,但实现它并不困难:使用上述代码生成的密码会很强大,但很难记住。如果它只是一个初始的临时密码或短期令牌,那么它很好,但如果用户应该使用更长时间,那么使用密码短语更合适。
import string
import secrets
length = 15
# Choose wide set of characters, but consider what your system can handle
alphabet = string.ascii_letters + string.digits + string.punctuation
password = ''.join(secrets.choice(alphabet) for i in range(length))
print(password)
我们可以像上面使用简单的密码一样构建一个密码生成器,但是当有可用的库时,为什么要打扰。这个库被称为著名的 XKCD,关于密码强度,它完全按照漫画的描述 - 生成由单词组成的强密码短语:此片段首先在您的系统上查找单词/字典文件,例如 /usr/share/dict/words 并选择指定长度的所有单词,然后从中生成用于生成密码短语的单词列表。生成器本身有一些参数,我们可以用来自定义密码短语。除了明显的单词数和长度外,它还具有离合参数,这是一个单词,其字符将用作密码短语中单词的首字母。
# pip install xkcdpass
from xkcdpass import xkcd_password as xp
word_file = xp.locate_wordfile()
words = xp.generate_wordlist(wordfile=word_file, min_length=5, max_length=10)
for i in range():
(xp.generate_xkcdpassword(words, acrostic=, numwords=, delimiter=))


