【问题标题】:Salting - the order of steps加盐 - 步骤的顺序
【发布时间】:2011-09-27 20:18:20
【问题描述】:

在加盐密码时,哪种方法是正确的(或最有效的方法)?

A.首先对密码进行哈希处理,然后使用盐对密码进行哈希处理,如下所示:

$password = "passwd";

$salt = "s0merndslt";

$password = sha1($password);

$salty = sha1($password.$salt);

B.获取密码和盐并像这样将它们散列在一起:

$password = "passwd";

$salt = "s0merndslt";

$salty = sha1($password.$salt);

如果之前有人问过这个问题,我深表歉意,但我找不到在 SO 上加盐的特定部分的答案。

【问题讨论】:

    标签: security encryption hash salt


    【解决方案1】:

    实际上,无论哪种情况。

    但是,您的示例 #1 提供了时间权衡,这将(稍微)减慢暴力密码查找器的速度。

    随着 GPU 的出现,仅仅对密码进行加盐是不够的。一个 GPU 支持的暴力破解密码工具,当给定一组密码来查找时,可以在几分钟(甚至几秒钟)内完成短密码。

    这就是 bcrypt 或 PBKDF#2 等工具或算法存在的原因:它们多次迭代散列操作以产生大量工作负载,这使得在商品硬件上从散列中查找密码“不可行”。

    如有疑问,请勿实施您自己的密码哈希解决方案!使用bcrypt 或 PBKDF#2。

    【讨论】:

    • 谢谢。您是否推荐使用 PHP 中的某个库来使用这些算法? openwall.com/phpass 之类的东西我快速搜索了 bcrypt 和 PBKDF2,但官方 PHP 文档中没有任何结果。我假设 PHP 本身不支持这些...
    • @Aaron:这里有几个版本的 PBKDF#2,这里有一个来自维基百科的链接:itnewb.com/v/… 请注意,您仍然需要存储迭代(至少 >5000)和盐作为数据库中密码的一部分(或在单独的列中,由您决定)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-18
    相关资源
    最近更新 更多