哈希之前的盐或盐之前的哈希?

时间:2016-01-15 08:01:13

标签: hash passwords salt

很明显,在写入数据库之前,我们应该使用salt和hash密码。为此,我看到了两种不同的基本方法:

  1. 散列前腌制

    hash(hash(password) + salt)
    
  2. 腌制前的哈希

    parse_str('radio1=blue&radio2=red&radio3=white',$postdata);
    
    var_dump($postdata);
    
  3. 我的直觉以某种方式说第二种方法由于盐析前的散列而出现了问题,但这只是我没有加密基础的本能。

    这些方法中的一种比另一种方法更安全吗?第二种方法有任何弱点吗?

1 个答案:

答案 0 :(得分:0)

推荐的哈希算法(如PBKDF2或BCrypt)无法在单次传递中计算哈希值,因此所描述的方法都不够。它们应该提供一个成本因子,它控制计算单个哈希的必要时间。成本因素决定了完成了多轮散列。

如何应用盐是算法的一部分,因此最好将其留给算法。

这就是BCrypt如何应用盐(来自维基百科):

EksBlowfishSetup(cost, salt, key)
    state \gets InitState()
    state \gets ExpandKey(state, salt, key)
    repeat (2cost)
        state \gets ExpandKey(state, 0, key)
        state \gets ExpandKey(state, 0, salt)
    return state