【问题标题】:Hashing a password more than once [duplicate]多次散列密码[重复]
【发布时间】:2018-01-28 14:24:31
【问题描述】:

如果我对密码进行两次哈希处理:

$psw1= password_hash($password,PASSWORD_DEFAULT);
$psw2=password_hash($psw1,PASSWORD_DEFAULT);

这是更安全还是没用?

P.S.:我是php新手

【问题讨论】:

标签: php password-hash


【解决方案1】:

这将阻止您验证密码,因为您将无法重现第一个哈希值,因为您已经丢弃了第一个哈希值的随机盐。相反,为了提高单个哈希的安全性,只需调整其成本因子:

password_hash($password, PASSWORD_DEFAULT, ['cost' => 12])

成本越高,进行的散列次数就越多。选择一个成本不会太慢,但也不会太低。事实上,随着更好的服务器硬件变得可用,您应该随着时间的推移不断增加成本因素​​,并随着时间的推移使用更强大的算法重新哈希您的用户密码。这就是 password_needs_rehash 的具体用途。

【讨论】:

    【解决方案2】:

    我认为这是无用的,因为一旦散列,就不可能知道真正的价值是什么......至少从理论上讲。

    我建议使用强哈希函数,如 sha512 或ripemd320,因为存储哈希密码的公开可用数据库并不多。

    如果您想了解更多信息,我在 stackoverflow 上发现了一个老问题,答案很好:PHP dehashing the password

    【讨论】:

    • 如果我可以改写:“使用'模糊'哈希,因为这些彩虹表并不多”?不是很理智的建议;算法本身必须很强大,而不是因为晦涩难懂。
    • 据我所知,sha512 和ripemd320 是强哈希算法。我认为公共数据库不多这一事实只是一个优点。我完全知道在线没有绝对的安全性,密码哈希也不是绝对的,因为可能会发生冲突,但我更喜欢使用几乎没有公共免费数据的强算法而不是经典的 md5(md5 有更多可能的冲突并且是算法不如我提到的其他 2 个强大);)
    • 嗯,MD5 确实是一个糟糕的选择。如果算法本身很好,那很好,但一般来说,防范现有数据库或彩虹表的方法是盐,而不是晦涩。
    • 上述算法 (SHA-*) 不适用于散列密码,不是因为它们不安全,而是因为它们速度太快,因此很容易被暴力破解。密码哈希函数提供了一个成本因子,可用于控制计算单个哈希(BCrypt、PBKDF2、SCrypt、Argon2)所需的时间。
    猜你喜欢
    • 2020-08-16
    • 2015-12-02
    • 2020-03-09
    • 2015-06-29
    • 1970-01-01
    • 2015-01-19
    • 2015-04-25
    • 2011-09-14
    • 1970-01-01
    相关资源
    最近更新 更多