欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 旅游 > Django check_password原理

Django check_password原理

2025/2/24 12:23:35 来源:https://blog.csdn.net/m0_65788436/article/details/145810157  浏览:    关键词:Django check_password原理

check_password 是 Django 提供的一个用于密码校验的函数,它的工作原理是基于密码哈希算法的特性。

Django 的 make_password 函数在生成密码哈希时,会使用一个随机的 salt(盐值)。这个 salt 会与密码一起进行哈希运算,生成最终的哈希值。由于 salt 是随机的,因此即使输入相同的密码,生成的哈希值也会不同。

 为什么 check_password 可以正确校验密码?

1. 密码存储的原理

在 Django 中,密码通常是以哈希值的形式存储在数据库中的,而不是明文存储。哈希是一种单向加密算法,它可以将任意长度的输入(如密码)转换为固定长度的输出(哈希值)。哈希算法的特点是:

  • 不可逆性:无法从哈希值反推出原始密码。

  • 唯一性:不同的输入几乎不可能生成相同的哈希值。

  • 随机性:即使输入相同,每次生成的哈希值也可能不同(因为使用了随机的 salt)。

Django 使用 make_password 函数对密码进行哈希处理。例如:

from django.contrib.auth.hashers import make_password# 对密码进行哈希处理
hashed_password = make_password('qwe123')
print(hashed_password)

 结果类似下面的

生成的哈希值包含以下部分:

  • 算法名称(如 pbkdf2_sha256:用于标识使用的哈希算法。

  • 迭代次数(如 600000:用于增加哈希计算的复杂度。

  • Salt(盐值,如 8GwcoEyP0yk48cG89Emm8w):一个随机字符串,用于增加哈希的唯一性。

  • 哈希值(如 XsogYGIVzWCEvUuJwIMuYMNGt5wFyyiEpi+vh1kz39g=):密码和 salt 经过哈希算法计算后的结果。

2. 密码校验的原理

当用户登录时,输入的密码需要与数据库中存储的哈希密码进行比对。由于哈希是不可逆的,我们不能直接解密哈希值来获取原始密码。因此,Django 使用 check_password 函数来完成密码校验。

check_password 的工作原理如下:

  1. 提取 Salt:从数据库中存储的哈希密码中提取出 salt。

  2. 重新计算哈希值:将用户输入的密码与提取的 salt 结合,使用相同的哈希算法和迭代次数重新计算哈希值。

  3. 比对哈希值:将重新计算的哈希值与数据库中存储的哈希值进行比对。如果两者一致,说明用户输入的密码是正确的。

例如

from django.contrib.auth.hashers import check_password# 用户输入的密码
input_password = 'qwe123'# 数据库中存储的哈希密码
stored_hashed_password = 'pbkdf2_sha256$600000$uRejMsolXFgxqvVJk5543w$XsogYGIVzWCEvUuJwIMuYMNGt5wFyyiEpi+vh1kz39g='# 校验密码
is_valid = check_password(input_password, stored_hashed_password)
print(is_valid)  # 如果密码正确,返回 True;否则返回 False

哈希算法的确定性:只要输入(密码 + salt)和算法参数(如迭代次数)相同,哈希算法的输出就是确定的。因此,check_password 可以通过重新计算哈希值来验证密码的正确性。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词