gpt4 book ai didi

Django 身份验证和加密 - 它是如何工作的?

转载 作者:行者123 更新时间:2023-12-02 20:31:05 28 4
gpt4 key购买 nike

我是 django 的新手,我想知道 django 中的身份验证系统和哈希密码是如何工作的?为什么无法知道用户密码? (即使我知道算法和盐)

在我看来,我看到的身份验证有点像 python 条件:如果输入==密码: 已验证=真(显然我知道它不是这样编码的)

但我不知道它是如何哈希和未哈希的,以及是否有办法知道用户密码是什么?

最佳答案

不可能知道用户的密码,因为它们已加密。

Django 使用多种加密安全哈希算法中的任何一种来执行此操作。加密哈希算法被编写为获取任意长度的数据并返回一个数字(“消息摘要”),该数字似乎完全随机,但具有几个特殊属性:

  • 输入相同的数据将始终返回相同的数字
  • 输入即使略有不同的数据也会产生完全不同的数字
  • 从输出数据计算输入数据实际上是不可能的

具体如何编写加密哈希算法来做到这一点很复杂,但如果您感兴趣,值得阅读更多内容。

Django 所做的本质上是这样的:

def is_password_correct(hash, salt, rounds, password):
"""<hash>, <salt>, and <rounds> come from the DB
<password> comes from the user
"""
digest = hash_function(salt + password)

# make guessing a password take lots more work
for n in range(rounds):
digest = hash_function(digest)

if digest == hash:
return True
else:
return False

其中 hash_function() 是 Django 支持的加密哈希函数之一(例如 BCrypt 或 PBKDF2)。

这比以纯文本形式将用户密码存储在数据库中要安全得多,因为如果黑客要获取数据库的副本,他们得到的只是密码哈希值。从密码哈希中恢复密码需要猜测实际密码并通过运行上述函数进行检查。这可以保护可能(与所有安全建议相反)在多个地方使用相同密码的用户。

为此安全性付出的代价是每次用户登录时都必须运行哈希算法以“重新加密”其密码并检查它是否与数据库中的内容匹配(每次登录尝试可能需要几毫秒) .

您可以阅读有关其密码系统的更多信息 here

关于Django 身份验证和加密 - 它是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48697910/

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