这3种创建盐的方法的优缺点是什么?
$salt = md5($password);
$salt = sha1(md5($password));
$salt = generate_random_number();计算哈希:
$hash = sha1($salt + $password);发布于 2010-01-04 00:58:52
盐
要回答这个问题,重要的是要知道盐是什么。
Salts是针对预先计算的表的攻击而设计的。例如彩虹桌。彩虹表是巨大的表,所有可能的密码变化达到一定的长度。(使用巧妙的内存/时间权衡。)
如果攻击者只想破解单个密码,他们不会提供任何优势。
如果满足以下条件,则上述语句不成立
使用彩虹表的攻击者通常想要破解尽可能多的账户。
你的哪种方法最安全?
除了第三个方法之外,所有的方法都是不安全的。这是因为使用任何其他方法都允许攻击者计算整个数据库的彩虹表。
因为盐依赖于密码。也不要让它依赖于用户名,这仍然允许攻击者为100个最常见的用户名创建一个彩虹表。
请牢记
发布于 2010-01-04 07:45:10
前两种方法毫无价值。加盐的全部意义在于,相同的密码并不总是产生相同的加密/散列字符串。
如果您使“盐”仅依赖于密码,则相同的密码将始终导致相同的散列。因此,基本上结果是相同的,就好像你使用了一个略有不同的散列函数,没有任何盐。
使用第三种方法时,两个具有相同密码的用户通常会得到不同的salt,并且对于两个用户来说,密码的散列版本看起来会不同。从散列很难看出它们都有相同的密码。
发布于 2010-01-04 01:03:31
严格地说,您只有一种加盐方法,用来计算散列。前三行是生成盐的不同方式。
因此,这里有一个盐来阻止预计算查找表发现密码。它应该是某个人存储的固定值,优选地,对于被散列的纯文本是唯一的。
最安全的方法是使用加密安全的随机数生成器来生成盐,然后将其与密码一起存储。
如果您创建了一个salt,它是密码的MD5,那么它必须与散列和salted密码值一起存储,这意味着您有一个容易受到预计算查找表攻击的非salt散列,除非您计划每次都计算它,这会对性能造成很小的影响。通过对MD5散列进行SHA,可以减少出现纯文本值的可能性,因为MD5散列值的数量是有限的,因为它们的长度是固定的。这意味着彩虹表查找可能比真正随机的盐更有可能成功。
所以请使用随机的盐。
https://stackoverflow.com/questions/1994882
复制相似问题