什么是SALT以及如何使用它?

问题描述 投票:0回答:7

我一直在四处寻找,但仍然不确定什么是“盐”以及如何使用/实现它。抱歉问了这个菜鸟问题,我正在自学 php。

php salt
7个回答
47
投票

我绝对不是专家,但真正简短的答案是“加盐”一行文本意味着在其末尾添加一些额外的字符。您可以用“abcdefg”给“salt”加盐以获得“saltabcdefg”。如果“salt”恰好是您希望使其更难以猜测的密码,这可能会很有用。

通常,密码+盐会通过一些难以逆转的过程转换(“散列”)为完全不同的字符串。然后,将转换后的字符串与盐的明文一起存储为密码,并丢弃密码本身的原始明文。当您想要检查某人是否输入了正确的密码时,您可以将他们输入的任何内容与密码文件中列出的盐相结合,然后对结果进行哈希处理。如果结果与您记录的密码哈希相匹配,那么您就知道他们输入了正确的密码。

使用盐就像挑选一根绳子作为盐一样简单,然后确保跟踪它。但是,您可以改变每个密码的盐,然后您必须有一种方法来跟踪密码+盐组合并生成变体。当然,您可能还想对密码进行哈希处理,而不是保存密码的纯文本,因此您必须选择一个哈希函数。至此,问题已经从适当加盐发展到实施密码安全方案。

对于 PHP,您可能想了解一些框架是如何实现这一点的。两个快速链接,分别针对 CakePHP 和 Zend:

http://www.jotlab.com/2010/04/18/cakephp-rainbow-table-protection-behaviour/

http://www.zimuel.it/blog/2009/07/build-a-secure-login-with-zend-framework/


28
投票

很多年前,当我第一次问这个问题时,有人回答我:“盐对食物有什么作用?”答案是它增加了食物的多样性。加密盐背后的想法是,将其添加到字符串的末尾或开头,以便两个相同的密码不会散列为相同的加密值。

考虑一下 - 如果我有一个非常常见的密码,例如“hello123”,然后它散列到与所有其他“hello123”密码完全相同的加密散列,我不能只在散列密码列表中查找看看还有谁拥有相同的加密哈希,并在他们的帐户上使用我的密码?


7
投票

盐是添加到要加密或散列的字符串中的(短)字符串。一个例子:

<?php
 $password = 'abcdefg';
 $salt = 'anythingyouwant_';
 $pw_hash = md5($salt.$password);
?>

这增加了哈希的安全性,因为“anythingyouwant_abcdefg”不太可能已经存储在哈希数据库中(http://en.wikipedia.org/wiki/Rainbow_tables


6
投票

嗯,在评论中,谢谢ceejayoz

http://en.wikipedia.org/wiki/Salt_(密码学)

盐是在散列字符串之前添加到字符串中的东西,它为密码等添加了另一层安全性。


0
投票

让我们通过组合几种哈希算法来让事情变得有趣一点,制作一个双重哈希算法:

$password = "myPassword";
$salt = sha1(md5($password)).'k32duem01vZsQ2lB8g0s'; 
$password = md5($password.$salt);

如您所见,我们首先使用双重哈希算法(md5 和 sha1)对密码进行哈希处理,并与创建的盐值密钥连接。之后,我们将真实密码与生成的盐值结合起来,并使用 md5 再次对其进行哈希处理。优点是这种方式的 alt 值是随机的并且会变化,因此几乎不可能被破坏。我的意思是,如果你可以等一百万年并且手上有一台超级计算机,请尝试打破它。


0
投票

出于某种原因。对于刚接触密码学的人来说,盐通常很难掌握。一旦点击,这个概念就非常简单了。看看这篇文章。我认为它比大多数人更好地解释了这个概念。

https://web.archive.org/web/20140430053616/http://cryptodox.com/Salt_(密码学)


0
投票

加盐和散列是一种将密码存储在数据库中的技术。在密码学中,加盐意味着添加一些内容和密码,然后对其进行哈希处理。因此盐和哈希提供了两个级别的安全性。加盐总是会产生唯一的密码,即如果有两个相同的密码,加盐后,生成的字符串将会改变。加盐与散列一起使用可以提高密码的安全级别。

语法:

string password_hash( string $pass, int $algo, array $options )

参数:

  1. $pass:此参数保存要保护并存储在数据库中的密码。
  2. $algo:它指定用于创建 $pass 的哈希值的哈希算法。
  3. $options:是加盐部分。它需要考虑外形成本因素。它是可选的,如果留空,默认成本将添加到字符串中(大多数情况下为 10)。请注意,更高的成本会导致密码保护性更强,从而给 CPU 带来沉重负担。
© www.soinside.com 2019 - 2024. All rights reserved.