【问题标题】:Unique generated SALT for each user?为每个用户生成唯一的 SALT?
【发布时间】:2013-03-14 09:48:59
【问题描述】:

我想问一下是否可以为每个用户生成一个唯一的盐,然后像这样散列它 sha1(sha1($password . $salt)) 所以 $salt 是随机生成的字符串?

如果是,我将如何在登录时加密密码?

Xenforo 使用这个,我想知道如果他们为每个用户使用唯一的盐,他们如何加密密码?。

非常感谢。

【问题讨论】:

标签: php hash sha1 salt


【解决方案1】:

Don't make your own password hashing algorithm。它将很容易被破解,并且当您的数据库遭到破坏时,您的用户不会感激他们的密码被盗。

Bcrypt 和其他经过充分测试的哈希已经这样做了:

>>> bcrypt.generate_password_hash('password', 15)
    '$2a$15$bzaLXuer1C8dtSckDp3AI.eOoL/nOTsSdpjEMyDMcJ3ZQELdRcLzq'
>>> bcrypt.generate_password_hash('password', 15)
    '$2a$15$Ye.cFInKhzo1KvAJGSi6yORV5uEqeW.Z1oAhdfi.163Psz4YPA3CO'

随机盐和轮数存储在散列本身中,由分隔符分隔,这让恒定时间密码检查功能从生成的散列字符串中挑选盐。

如果出于某些其他原因您需要创建安全的随机字符串,请使用openssl_random_pseudo_bytes():

$bytes = openssl_random_pseudo_bytes(64, true);
$hex = bin2hex($bytes);

【讨论】:

    猜你喜欢
    • 2014-03-09
    • 1970-01-01
    • 2018-06-25
    • 2016-05-20
    • 2019-03-25
    • 2015-01-30
    • 1970-01-01
    • 2020-11-03
    • 1970-01-01
    相关资源
    最近更新 更多