SHA512哈希MYSQL / PHP

时间:2015-09-03 08:57:22

标签: php mysql hash password-hash

为简单的问题道歉,但我还在学习php / mysql

我尝试在注册时散列密码,但是一旦散列完成,用户就无法使用他们的密码登录。下面是我的变量的一小部分

  $password = hash('sha512',$_POST['password']); 
  $confirmPassword = hash('sha512',$_POST['confirmPassword']);

- >因此,密码与确认密码匹配,然后使用Javascript和PHP对它们进行比较,如果匹配则将数据插入到数据库中。那么为什么它不允许用户登录?

目前在我的数据库中,我的密码列设置为CHAR(128),如果这有帮助吗?

2 个答案:

答案 0 :(得分:1)

密码列的大小太小。请执行简单的操作:

echo sizeof(hash('sha512',$_POST['confirmPassword']));

并获得正确的数据库列大小。

答案 1 :(得分:1)

使用单个未加盐的SHA512以这种方式散列密码是不安全的。 PHP提供专用函数password_hash()password_verify()来正确完成这项工作:

// Hash a new password for storing in the database.
// The function automatically generates a cryptographically safe salt.
$hashToStoreInDb = password_hash($_POST['password'], PASSWORD_DEFAULT);

// Check if the hash of the entered login password, matches the stored hash.
// The salt and the cost factor will be extracted from $existingHashFromDb.
$isPasswordCorrect = password_verify($_POST['password'], $existingHashFromDb);

要检查密码及其确认是否相同,您应该直接比较它们(明文),之前计算哈希值。

建议使用varchar(255)类型的数据库字段来存储此哈希,以备将来使用。