当前位置: 首页 > 面试题库 >

Django密码存储在数据库中的格式是什么?

花飞尘
2023-03-14
问题内容

您知道django密码的存储方式如下:

sha1$a1976$a36cc8cbf81742a8fb52e221aaeab48ed7f58ab4

那就是“ hashtype $ salt $ hash”。我的问题是,他们如何获得$哈希?是将密码和salt组合在一起,然后进行哈希处理,还是完全其他?


问题答案:

与往常一样,使用源:

# 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只是验证相同的盐和相同的密码是否导致相同的摘要。



 类似资料:
  • 我正在创建一个用户表,其中我需要以加密格式存储密码。我需要知道什么数据类型可以用来创建一个接受加密密码的列。基本上,我不需要任何函数来加密密码。当我们创建表时,必须注意这一点。 根据此链接 TIA 普拉迪普

  • 问题内容: 我正在使用numpy.save函数保存NumPy数组。我希望其他开发人员能够使用C语言从这些文件中读取数据。所以我需要知道numpy如何在file中组织二进制数据。确定,当我保存’i4’数组时很明显,但是包含某些结构的数组的数组又如何呢?在文档中找不到任何信息 UPD:可以说tha数据类似于: UPD2:如何保存“动态”数据(dtype-对象) 从C那里读那个东西真的吗? 问题答案:

  • 问题内容: 我让人们在氏族中提交用户名和密码,然后我需要知道使用此代码将其提交到数据库中是否安全,或者在数据库中是否安全。 我使用参数来避免SQL注入攻击。 -------------------------------------------------- -------------------------------- 这不是重复的,因为以不同的方式询问和存储密码。它使用MD5哈希密码。 问题

  • 我研究了Jasypt在属性文件中存储数据库加密密码的方法。它与Spring等有很好的集成,但这家伙提出的加密密码的方法对我来说有点奇怪: > 将加密/解密的密码存储在环境变量或源代码中。 这两种选择看起来都不安全,有点不安全。 我的问题: 存储加密密码的最佳实践是什么? 我可以在这里使用基于密钥的加密(即私钥/公钥)吗?

  • 11:12:17,289信息[org.apache.Coyote.http11.http11protocol](MSC服务线程1-2)JBWeb003001:Coyote http/1.1正在初始化:http-/0.0.0.0:8080 11:12:17,297信息[org.apache.Coyote.http11.http11protocol](MSC服务线程1-2)JBWeb003000:Co

  • 问题内容: 我有定期被推送到数据库中的Java代码(很难解释为什么它存在于数据库中,而这只会使焦点从主要问题上移开)。 在运行时,我查询数据库。我可以执行从数据库中获得的代码吗?我只在代码中存储main方法的内容。运行数据库的服务器是HTTP服务器。 数据库中的示例代码(仅供参考): 预期产量: 问题答案: 任何Java程序都是正确的Groovy程序。因此,您可以将Groovy依赖项添加到项目中,