与MYSQL sha1相关时什么是“盐”?我不知道与sha1密码加密有什么关系?有人可以解释一下它是什么吗?
答案 0 :(得分:14)
salt是一个值,它添加到您想要单向散列的密码(或其他机密)中。这意味着它可以在密码之前,之后或某处,只要其位置和值对于给定的提供密码是一致的。
这样做可以减轻字典攻击 - 基本上是没有盐预先清除的常用密码字典 - 只要攻击者不知道哈希,就可以用来“猜测”单向密码。如果每个密码都有不同的哈希值,那么攻击者就很难创建一个为破解密码而优化的字典(他们需要为每个单独的盐提供字典,他们还需要知道每个密码中盐的位置)。
当然,要使所有这些都适用,攻击者必须首先拥有密码的哈希值。这与通过某些输入提示猜测密码来攻击密码无关。
关于MySQL,特别是如果你在散列密码时提供盐,请确保记录那些盐在哪里。然后,当用户尝试进行身份验证时,您将记录的salt值与密码组合在一起(例如,在调用crypt
期间),如果生成的哈希值匹配,则他们输入了正确的密码。 (注意,密码的散列在任何时候都没有反转;因此单向。)
答案 1 :(得分:9)
salt只是您附加到密码的字符串,无论是作为常量还是通过算法
这使得任何违反安全性并获取存储密码的人更难以获取,这反过来使他无法使用彩虹词典来解锁真实密码,这在黑客的角度来看因为很多人在很多不同的网站中使用相同的密码,所以很有用。
$salt = "this is a salt";
$password = 'this is an password';
$hash = sha1($salt.$password);
这就是你基本上可以加密密码的方式
答案 2 :(得分:5)
在散列之前将盐附加到明文(或反之亦然),以使字典查找更加昂贵。