好的,我知道这可能很简单,但我似乎无法在任何地方找到直接答案。假设我有以下内容:
Password: "mypassword"
Salt: 1234567
盐腌的想法是做hash(password + salt)
还是hash(password) + salt
?我的猜测是,只有前者才有意义,但我只是想确保我没有错过任何东西。
请原谅我的无知。
答案 0 :(得分:17)
你已经拥有它,它是前者。
如果您只是连接了salt和hash,那么攻击者可以简单地删除“salt”并使用彩虹表。通过对明文+盐进行散列,不能将盐分解出来。
答案 1 :(得分:12)
实际上,它是salt + hash(salt+password)
(Salt是哈希计算的一部分 - 但你必须保持清晰)
答案 2 :(得分:6)
哈希(密码+盐)。如果在散列之后连接salt,则连接很容易可逆,并且在反转密码的散列方面没有任何困难(使用彩虹表)。
也就是说,有些系统同时做到这两点,例如Django在数据库中存储salt $ hash(salt + password)。这样就可以在一个地方获得根据哈希检查密码所需的每一段数据。
答案 3 :(得分:3)
我将这些链接添加到此问题中是为了完整性 - 这个咸散列的主题需要广泛理解其中的主题以避免代价高昂的错误。
这里的答案中没有明确表达的关键点是必须为每个密码使用唯一的盐。有关原因的详细信息,请阅读链接的项目。
为什么要使每种盐都是唯一的:Salting Your Password: Best Practices?
答案 4 :(得分:0)
salt应该是哈希计算的一部分