md5($salt.":".$password_hashed)
。 $password_hashed
是原始密码的简单m5d字符串,哈希值来自mktime()
。
我不明白盐是如何工作的,我是否也需要将其保存在数据库中?如果盐不断变化,这是如何工作的?
如果用户使用密码'password'注册,并且他们注册的时间是1234567890(作为unix时间戳)。密码生成将是md5(mktime().":".$_POST['password'])
或类似的东西。但是,如果用户尝试使用“密码”登录,则新创建的盐会有所不同吗?
答案 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'(以及产生的哈希值)吗?