将SALT添加到哈希(crypt)函数(澄清),还有一些小问题

时间:2012-10-24 20:38:59

标签: php encryption bcrypt

我一直在谷歌上学习/寻找TOO很长时间,虽然我找到了许多马马虎虎的教程,但我想知道(crypt)中的“可选SALT”参数)PHP中的函数。我有太多的标签打开而无处可去,此时,我认为id只是寻求帮助。

就盐而言,我在某处读到如果你不添加它,它会为你添加,但这不是一个好习惯。我似乎无法找到“为什么”这是好/不好。应如何处理?

我已经在这里和那里读过一些关于盐随机化的内容,但其他人说这无关紧要......再次,令人困惑。

此外,我在检查存储的数据时也遇到了问题。显然,如果我做了像

这样的事情
crypt("pass string here",salt here);

ill获取pass的随机字符串....所以在用户登录时,然后是

的值
$_POST['the entered name/pass etc '];

并检查该用户传递的db值始终等于false。那么我想id必须对用户输入时给出的传递进行rehash / salt,然后然后测试db上的内容?

另外,我已经阅读了整个网络(但此时我很困惑),不知何故,盐存储在数据库中?并且它不必被隐藏?

我可以继续下去,只是老实说,我觉得我读得太多而且不确定如何继续。在这一点上,如果有人拥有这些资源,那么真正喜欢的是带有教程的GOOD链接。

2 个答案:

答案 0 :(得分:0)

您需要在用户注册时生成安全的随机salt值,并将该盐存储在数据库中。

当用户登录时,从数据库中获取salt和hash,计算使用原始salt键入的密码的哈希值,并确保哈希匹配。

另外,不要使用通用哈希算法(例如MD5或SHA *);相反,使用专用的慢速密码哈希算法,例如bcrypt或scrypt或PBKDFv2。

答案 1 :(得分:0)

为了最大限度地提高安全性,您在数据库中永远不会有明文密码,并且对任何拥有/可以访问该数据库的人都是开放的。所以你要做的就是选择一个预定义的salt,获取用户所需的密码并使用salt和hash加密它。

盐是你添加的一些额外的随机字符,使散列密码更加安全。你应该跟踪这一点。

哈希然后接受salt +密码并根据它生成一个随机字符串,这样如果你给它相同的salt +密码,你将总是得到那个唯一的哈希值。

这似乎是对盐析/散列的一个相当有用的介绍:

http://crackstation.net/hashing-security.htm