Hash 先咸后咸还是先咸后咸?
很明显,在写入数据库之前,我们应该对密码进行加密和散列。为此,我看到了两种不同的基本方法:Hash 先咸后咸还是先咸后咸?,hash,passwords,salt,Hash,Passwords,Salt,很明显,在写入数据库之前,我们应该对密码进行加密和散列。为此,我看到了两种不同的基本方法: 先腌后炒 hash(password + salt) 腌制前先炒 hash(hash(password) + salt) 我的直觉告诉我,第二种方法由于盐析前的散列而有问题,但这只是我的直觉,没有密码学基础 这些方法中有一种比另一种更安全吗?第二种方法有缺点吗?推荐的哈希算法(如PBKDF2或BCrypt)无法在一次传递中计算哈希,因此所述两种方法都不够。它们应该提供一个成本因子,用于控制计算单个
hash(password + salt)
hash(hash(password) + salt)
这些方法中有一种比另一种更安全吗?第二种方法有缺点吗?推荐的哈希算法(如PBKDF2或BCrypt)无法在一次传递中计算哈希,因此所述两种方法都不够。它们应该提供一个成本因子,用于控制计算单个散列所需的时间。成本因素决定了进行了多少轮哈希运算 如何应用salt是算法的一部分,因此最好由算法决定 这就是BCrypt应用salt的方式(来自维基百科):
您的两个示例并不完全相同,
hash(password)+salt
显然毫无意义!这就是我们的目的,但它确实安全。但是现在你应该使用密码导向的方法,比如PBKDF2
或crypt
;如果你关心安全。派生(散列)需要是安全的(MD5不是)、有盐的和缓慢的(以使尝试代价高昂)。
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