盐渍算法强度

hel*_*der 1 php cryptography salt

这三种方法制造盐有哪些优点/缺点?

$salt = md5($password);

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

$salt = generate_random_number();
Run Code Online (Sandbox Code Playgroud)

计算哈希:

$hash = sha1($salt + $password);
Run Code Online (Sandbox Code Playgroud)

Geo*_*lly 10

要回答这个问题,了解盐是什么很重要.

盐用于预先计算的表格来抵御攻击.例如彩虹表.彩虹表是巨大的表,所有可能的密码变化都达到一定的长度.(使用聪明的记忆/时间权衡.)

如果攻击者只想破解一个密码,他们就没有优势.

如果,上述说法不正确

  • 该数据库不使用盐.然后可以使用普通的彩虹表.
  • 盐太短了.如果盐太短,它的效果与只有更长的密码相同.
  • 它像一样是常见的.肯定已经有一些含有盐的彩虹表.

使用彩虹表的攻击者通常希望破解尽可能多的帐户.

您的哪种方法最安全?

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

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

记住

  • 仅使用加密安全的随机生成器来计算盐.
  • 不要使用MD5.它已经被认为是破碎的,至少使用SHA1.

  • 答案基本上是正确的,但如果我们在挑剔,最好说盐被设计为防止基于预先计算的表的攻击,或者哪些彩虹表是特定类型. (2认同)