首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >盐化算法强度

盐化算法强度
EN

Stack Overflow用户
提问于 2010-01-03 20:54:44
回答 4查看 644关注 0票数 1

这3种创建盐的方法的优缺点是什么?

代码语言:javascript
运行
复制
$salt = md5($password);

$salt = sha1(md5($password));

$salt = generate_random_number();

计算哈希:

代码语言:javascript
运行
复制
$hash = sha1($salt + $password);
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-01-04 00:58:52

要回答这个问题,重要的是要知道盐是什么。

Salts是针对预先计算的表的攻击而设计的。例如彩虹桌。彩虹表是巨大的表,所有可能的密码变化达到一定的长度。(使用巧妙的内存/时间权衡。)

如果攻击者只想破解单个密码,他们不会提供任何优势。

如果满足以下条件,则上述语句不成立

  • 数据库不使用盐。那么就可以使用普通的彩虹桌了。
  • 盐太短了。如果盐太短,就和密码长了效果一样。
  • 这是一种和盐一样的普通盐。可以肯定的是,已经有一些彩虹表中包含了这种盐。

使用彩虹表的攻击者通常想要破解尽可能多的账户。

你的哪种方法最安全?

除了第三个方法之外,所有的方法都是不安全的。这是因为使用任何其他方法都允许攻击者计算整个数据库的彩虹表

因为盐依赖于密码。也不要让它依赖于用户名,这仍然允许攻击者为100个最常见的用户名创建一个彩虹表。

请牢记

  • 仅使用加密安全的随机生成器来计算盐。
  • 请勿使用MD5。它已经被认为是损坏的,请至少使用SHA1。
票数 10
EN

Stack Overflow用户

发布于 2010-01-04 07:45:10

前两种方法毫无价值。加盐的全部意义在于,相同的密码并不总是产生相同的加密/散列字符串。

如果您使“盐”仅依赖于密码,则相同的密码将始终导致相同的散列。因此,基本上结果是相同的,就好像你使用了一个略有不同的散列函数,没有任何盐。

使用第三种方法时,两个具有相同密码的用户通常会得到不同的salt,并且对于两个用户来说,密码的散列版本看起来会不同。从散列很难看出它们都有相同的密码。

票数 4
EN

Stack Overflow用户

发布于 2010-01-04 01:03:31

严格地说,您只有一种加盐方法,用来计算散列。前三行是生成盐的不同方式。

因此,这里有一个盐来阻止预计算查找表发现密码。它应该是某个人存储的固定值,优选地,对于被散列的纯文本是唯一的。

最安全的方法是使用加密安全的随机数生成器来生成盐,然后将其与密码一起存储。

如果您创建了一个salt,它是密码的MD5,那么它必须与散列和salted密码值一起存储,这意味着您有一个容易受到预计算查找表攻击的非salt散列,除非您计划每次都计算它,这会对性能造成很小的影响。通过对MD5散列进行SHA,可以减少出现纯文本值的可能性,因为MD5散列值的数量是有限的,因为它们的长度是固定的。这意味着彩虹表查找可能比真正随机的盐更有可能成功。

所以请使用随机的盐。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1994882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档