什么是 SALT,我该如何使用它?
我一直在四处寻找,我仍然不确定什么是“盐”以及如何使用/实现它。对不起,这个菜鸟问题,我是自学php。
我绝对不是专家,但真正简短的答案是,“腌制”一行文本意味着在它的末尾贴上一些额外的字符。你可以用“abcdefg”盐“来加盐,得到”saltabcdefg”。如果“salt”碰巧是您想要使其更难以猜测的密码,这可能很有用。
通常,密码+盐通过一些难以逆转的过程转换(“散列”)到一个完全不同的字符串中。然后,这个转换后的字符串与盐的明文一起存储为密码,密码本身的原始纯文本被丢弃。当您想要检查某人是否输入了正确的密码时,您可以将他们键入的任何内容与密码文件中列出的盐组合在一起,然后对结果进行哈希处理。如果结果与您记录的密码哈希匹配,则您知道他们输入了正确的密码。
实现盐可以像选择一根绳子作为盐一样简单,然后确保跟踪它。但是,您可以使用每个密码更改盐,然后您必须有一种方法来跟踪密码+ 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/
很多年前,当我第一次问这个问题时,有人问我:“盐对食物有什么作用?答案是它增加了食物的多样性。加密盐背后的想法是,它是你添加到字符串末尾或开头的东西,以便两个相同的密码不会散列到相同的加密值。
考虑一下 - 如果我有一个非常常见的密码,如“hello123”,然后它散列为与所有其他“hello123”密码完全相同的加密散列,难道我不能只查看散列密码列表以查看还有谁具有相同的加密散列,并在他们的帐户上使用我的密码吗?