2011-04-22 104 views
14

好吧,我知道这可能很简单,但我似乎无法在任何地方找到直接的答案。比方说,我有以下几点:什么是第一个,盐或哈希?

Password: "mypassword" 
Salt: 1234567 

是盐析像做hash(password + salt)hash(password) + salt的想法?我的猜测是,只有前者才有意义,但我只是想确保我不会错过任何东西。

请原谅我的无知。

回答

17

你明白了,它是前者。

如果你只是连接盐和散列,那么攻击者可以简单地删除“盐”并使用彩虹表。通过对明文+盐进行哈希处理,不能分解出盐。

0

该盐应该是散列计算的一部分

6

散列(密码+盐)。如果在散列之后连接盐,级联很容易逆转,并且不会增加任何难度来反转密码上的散列(使用彩虹表)。

也就是说,一些系统可以同时执行两个操作,例如, Django在数据库中存储salt $ hash(salt + password)。这很简单,因此需要根据散列检查密码的每一条数据都在一个地方提供。

11

其实,这是salt + hash(salt+password)(盐是散列计算的一部分 - 但你也必须保持它在清除)

+2

为什么你需要先放盐?黑客会忽略它会不会毫无意义? – Diskdrive 2011-04-29 06:19:09

+0

您需要存储它(明确),因为没有它,您将无法检查密码。 – leonbloy 2011-04-29 14:04:24

3

我添加这些链接到这个问题的完整性 - 咸散列的这个话题需要广泛了解主题,避免代价高昂的错误。

在这里的答案中没有完全表达的一个关键点是使用的每个密码的唯一盐的必要性。有关原因的详细信息,请阅读链接的项目。

为什么让每一个独特的盐:在话题Salting Your Password: Best Practices?

全面概述:Salt Generation and open source software