【问题标题】:So, is this the right way of storing passwords in a database? [duplicate]那么,这是在数据库中存储密码的正确方法吗? [复制]
【发布时间】:2013-11-18 06:55:45
【问题描述】:

以下是在数据库中存储用户密码的安全方式吗?

注册时:

$salt=hash("sha512", rand());
$password=hash("sha512", $_POST["password"].$salt);

insert_values_into_db;

登录时:

$given_password=$_POST["password"];

$salt=get_salt_from_db;
$correct_password=get_password_from_db;

if(hash("sha512", $given_password.$salt) === $correct_password){
    //Password is correct
}else{
    //Password is incorrect
}

这有什么明显的错误吗?

【问题讨论】:

  • 我不太了解这些天最适合使用哪些哈希函数,但这个逻辑似乎很合理。
  • 没什么问题。
  • 虽然最好的方法可能是使用 password_hash() 函数,或者 github.com/ircmaxell/password_compat 用于 PHP 的早期版本

标签: php database hash passwords


【解决方案1】:

所有这些哈希都针对速度进行了优化,并且在处理器上运行起来很容易。 (MD5、SHA512 等)因此破解它们同样容易。我要么重新散列几次,要么只使用crypt 方法:http://php.net/manual/en/function.crypt.php

阅读 PHP 文档中有关密码哈希的更多信息:http://php.net/manual/en/faq.passwords.php

【讨论】:

    【解决方案2】:

    最佳解决方案:如果您的 PHP 版本为 5.5 或更高版本,请使用 password_hash 函数。如果没有,请查看 ircmaxwell 的 password_compat 库。

    【讨论】:

      【解决方案3】:

      在人们使用的数据库中存储密码的最常用方法是

      md5 密码如:md5($password)

      crypt($password)

      您还可以添加双 md5 或双 crypt 以确保密码真正安全

      【讨论】:

      • md5,直接说不。如果您的意思是 md5(md5($password)) 确实降低了安全性,则加倍
      猜你喜欢
      • 2011-07-22
      • 2020-02-14
      • 2012-10-25
      • 1970-01-01
      • 2012-02-16
      • 2012-09-13
      • 1970-01-01
      • 2015-04-10
      • 2011-03-20
      相关资源
      最近更新 更多