用PHP填写密码

时间:2011-10-19 10:51:57

标签: php security hash

有人可以帮助我。我一直在阅读有关密码的信息,以使我的密码更安全。我使用的格式是salt:password_hashed,所以我的代码是md5($salt.":".$password_hashed)$password_hashed是原始密码的简单m5d字符串,哈希值来自mktime()

我不明白盐是如何工作的,我是否也需要将其保存在数据库中?如果盐不断变化,这是如何工作的?

如果用户使用密码'password'注册,并且他们注册的时间是1234567890(作为unix时间戳)。密码生成将是md5(mktime().":".$_POST['password'])或类似的东西。但是,如果用户尝试使用“密码”登录,则新创建的盐会有所不同吗?

4 个答案:

答案 0 :(得分:1)

您也必须存储盐,例如,您可以存储注册日期并在盐中使用。

答案 1 :(得分:0)

Salts防御rainbow tables。保存密码时会生成salt,因此在创建用户时以及更改密码时都会生成。您可以将salt存储为数据库中的单独字段,但您也可以将salt与加密密码连接,并将两者都存储在一个字段中。由于盐通常具有固定的长度,因此以后很容易将两者分开以验证登录密码。

根据US-CERT,值得注意的是md5“被认为是加密破坏并且不适合进一步使用”。你应该使用sha-256。

答案 2 :(得分:0)

您的盐可以是用户的电子邮件或用户名。

我推荐这种方法:

hash_hmac('sha256', $password, $salt);

答案 3 :(得分:-2)

  

我一直在阅读有关输入密码以使我的密码更安全的信息。

这是胡说八道。没有盐可以使您的密码更安全。

  

我还需要将其保存在数据库中吗?

  

如果盐不断变化,这是如何工作的?

它不起作用。

  

如果用户尝试使用“密码”登录,则新创建的盐会有所不同吗?

您怎么看?你不能自己比较mktime()结果和'1234567890'(以及产生的哈希值)吗?