gpt4 book ai didi

python - Django 密码以什么格式存储在数据库中?

转载 作者:IT老高 更新时间:2023-10-28 22:06:36 25 4
gpt4 key购买 nike

你知道 django 密码是如何存储的:

sha1$a1976$a36cc8cbf81742a8fb52e221aaeab48ed7f58ab4

这就是“hashtype $salt $hash”。我的问题是,他们如何获得 $hash?是密码和盐组合然后散列还是完全是别的东西?

最佳答案

一如既往,使用源代码:

# root/django/trunk/django/contrib/auth/models.py
# snip
def get_hexdigest(algorithm, salt, raw_password):
"""
Returns a string of the hexdigest of the given plaintext password and salt
using the given algorithm ('md5', 'sha1' or 'crypt').
"""
raw_password, salt = smart_str(raw_password), smart_str(salt)
if algorithm == 'crypt':
try:
import crypt
except ImportError:
raise ValueError('"crypt" password algorithm not supported in this environment')
return crypt.crypt(raw_password, salt)

if algorithm == 'md5':
return md5_constructor(salt + raw_password).hexdigest()
elif algorithm == 'sha1':
return sha_constructor(salt + raw_password).hexdigest()
raise ValueError("Got unknown password algorithm type in password.")

正如我们所见,密码摘要是通过使用选定的散列算法将盐与密码连接起来制成的。然后将算法名称、原始盐和密码哈希连接起来,用“$”分隔以形成摘要。

# Also from root/django/trunk/django/contrib/auth/models.py
def check_password(raw_password, enc_password):
"""
Returns a boolean of whether the raw_password was correct. Handles
encryption formats behind the scenes.
"""
algo, salt, hsh = enc_password.split('$')
return hsh == get_hexdigest(algo, salt, raw_password)

为了验证密码,django 只是验证相同的盐和相同的密码会产生相同的摘要。

关于python - Django 密码以什么格式存储在数据库中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/749682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com