很明显,在写入数据库之前,我们应该使用salt和hash密码。为此,我看到了两种不同的基本方法:
散列前腌制
hash(hash(password) + salt)
腌制前的哈希
parse_str('radio1=blue&radio2=red&radio3=white',$postdata);
var_dump($postdata);
我的直觉以某种方式说第二种方法由于盐析前的散列而出现了问题,但这只是我没有加密基础的本能。
这些方法中的一种比另一种方法更安全吗?第二种方法有任何弱点吗?
答案 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