【问题标题】:password in my mysql database using django .使用 django 在我的 mysql 数据库中输入密码。
【发布时间】:2011-06-28 04:11:23
【问题描述】:

这是密码:

sha1$265b1$5ff32d53cf53bdef243b6f83e33e513514352406
sha1$73f58$b037706983a566e2a2b4bab7ef062c2e84f4a33e

这两个字符串的密码都是'123456',

但是为什么他们有不同的字符串?

谢谢

【问题讨论】:

  • 加盐不一样!!

标签: mysql database django passwords


【解决方案1】:

Docs 中所述,django 使用盐对密码进行哈希处理。 salt 是 2 个$ 之间的几个字符,因此从技术上讲,您可以使用其他值更新其中的 1 行。

有关盐哈希的更多信息,请参阅This question

【讨论】:

    【解决方案2】:

    决定你的算法,有些算法的结果是不一样的

    【讨论】:

    • 如果我将一个字符串复制到另一个,密码是否也是'123456'。
    【解决方案3】:

    直到django 1.3 用于“加盐”原始密码:

    用户对象的密码属性是这样格式的字符串:

    hashtype$salt$hash
    

    那是 hashtype、salt 和 hash,用美元符号分隔。

    Hashtype 是 sha1(默认)、md5 或 crypt——用于执行密码单向哈希的算法。 Salt 是一个随机字符串,用于对原始密码进行加盐以创建哈希。

    但在django 1.4 之后,“salt”部分并没有记录在数据库中,默认情况下它使用另一种算法。

    【讨论】:

    • 关于 django 1.4 不存储 salt 部分的说法不正确。确实,django 1.4 默认使用了一种新算法(PBKDF2),但是如果你没有存储盐,就没有办法验证密码。除了盐之外,它还记录迭代次数,并对密钥进行多次哈希(默认为 10,000),以随着计算能力的增加而轻松扩展暴力攻击的难度。
    • 按照链接的文档,现在密码的记录是 algorithm$hash 没有盐,也许官方文档有错误? docs.djangoproject.com/en/1.4/topics/auth/…
    • 这有点误导,最好将其称为“令牌”,可能。这意味着身份验证机制使用第一个 $ 之前的部分来确定使用了哪种算法,并从 PASSWORD_HASHERS 设置中指定的那些中调用适当的散列器。它传递字符串的其余部分(在第一个 $ 之后)。 “哈希”可以由几个子部分组成,大多数算法确实使用盐,值得注意的是默认的:docs.djangoproject.com/en/dev/topics/auth/passwords
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-17
    • 2012-12-14
    • 2016-05-11
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    相关资源
    最近更新 更多