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

Dre*_*din 42 php salt

我一直在寻找,我仍然不确定"盐"是什么以及如何使用/实施它.抱歉,这是一个noobish问题,我是自学php.

App*_*ear 43

我绝对不是专家,但真正简短的回答是"腌制"一行文字意味着在它的末尾加上一些额外的字符.你可以用"abcdefg"盐"盐"来获得"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/


jwi*_*ir3 25

多年前,当我第一次提出这个问题时,我被问到:"盐对食物有什么作用?" 答案是它增加了食物的多样性.加密盐背后的想法是,它是您添加到字符串的结尾或开头的内容,以便两个相同的密码不会散列到相同的加密值.

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

  • 具有相同salt的相同密码将以相同的方式散列,是的.有些人为了增加安全性而使用每个用户的盐.即使是共享盐也可以显着提高安全性 - 有人为您的特定盐提供预先生成的盐渍哈希列表的可能性很小. (4认同)
  • 谢谢,盐是改变还是保持不变? (2认同)

Nea*_*eal 6

好吧,在评论中,谢谢ceejayoz

http://en.wikipedia.org/wiki/Salt_(cryptography)

在您对字符串进行哈希处理之前,您可以添加一个salt,它会为密码添加另一层安全性等.


Sut*_*uma 6

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

<?php
 $password = 'abcdefg';
 $salt = 'anythingyouwant_';
 $pw_hash = md5($salt.$password);
?>
Run Code Online (Sandbox Code Playgroud)

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