【问题标题】:What is "salt" when relating to MYSQL sha1?与 MYSQL sha1 相关时,什么是“盐”?
【发布时间】:2011-05-20 02:21:28
【问题描述】:

与 MYSQL sha1 相关时,什么是“盐”?我不知道与 sha1 密码加密有关的盐是什么?有人能解释一下它是什么吗?

【问题讨论】:

    标签: mysql sha1 salt


    【解决方案1】:

    盐是添加到密码(或其他秘密)的值,您希望以一种方式对其进行哈希处理。这意味着它可以在密码之前、之后或内部的某个位置,只要它的位置和值对于给定的提供的密码是一致的。

    它的作用是减轻字典攻击 - 基本上是没有盐的预散列的常用密码字典 - 只要攻击者不知道散列,就不会被用来“猜测”单向密码。如果每个密码都有不同的哈希值,那么攻击者很难创建一个为破解密码而优化的字典(他们需要为每个单独的盐创建一个字典,并且他们还需要知道盐在每个密码中的位置)。

    当然,要使所有这些都适用,攻击者必须首先拥有您密码的哈希值。这与通过一些输入提示猜测密码来攻击密码无关。

    特别是关于 MySQL,如果您在对密码进行哈希处理时提供了盐,请确保您在某处记录了该盐的内容。然后,当用户尝试进行身份验证时,您将记录的盐值与密码结合起来(例如在调用 crypt 期间),如果结果哈希匹配,则他们输入了正确的密码。 (请注意,密码的哈希值在任何时候都不会被反转;因此是一种方法。)

    【讨论】:

      【解决方案2】:

      salt 只不过是您附加到密码的字符串,可以作为常量或通过算法

      这使得任何破坏您的安全并访问您存储的密码的人更难获得,而这反过来又使他几乎不可能使用彩虹字典来解锁真正的密码是什么,从黑客的角度来看可能很有用,因为很多人在很多不同的网站上使用相同的密码

      $salt = "this is a salt";
      $password = 'this is an password';
      $hash = sha1($salt.$password);
      

      这就是你基本上可以加盐密码的方式

      【讨论】:

      • 那么盐是什么:sha1$0e7eb$f2353e34dd1811c3ce4af5c2b0f5cb43a04a16ce
      • 你看不出来,这是密码的一部分
      • @Breezer:不正确;你不能从哈希中提取它。但它与使用的算法和生成的哈希一起单独存储。
      • 盐必须始终是随机的。如果您使用常量,则它是键而不是盐。
      • @Jacco:不一定是随机的,只是不是恒定的。 :)
      【解决方案3】:

      在散列之前将盐附加到明文(反之亦然),以使字典查找更加昂贵。

      【讨论】:

      • 你能给我举个例子吗?
      • +1 - 对。例如,这意味着有权访问一堆散列密码的攻击者不能只对字典进行一次 SHA1 散列,然后将其与所有密码进行批量比较;由于盐,必须为每个密码重新进行散列(使用正确的盐)。
      猜你喜欢
      • 1970-01-01
      • 2010-09-19
      • 1970-01-01
      • 2011-05-25
      • 2012-12-13
      • 2010-12-25
      • 2011-06-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多