【问题标题】:SHA512 Hashing MYSQL/PHPSHA512 哈希 MYSQL/PHP
【发布时间】:2015-09-03 08:57:21
【问题描述】:

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

我正在尝试在注册时对密码进行哈希处理,这很有效,但是一旦哈希处理完成,用户就无法使用他们的密码登录。下面是我的变量的一个小sn-p

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

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

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

【问题讨论】:

  • 基本上你是在要求我们调试你的代码,这甚至不存在 - 我的意思是正在做日志记录部分的代码。

标签: php mysql hash password-hash


【解决方案1】:

你的密码栏太小了。做个简单的:

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

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

【讨论】:

  • 谢谢,看来我犯了一个粗心的错误:)
【解决方案2】:

使用单个未加盐的 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) 类型的数据库字段来存储此哈希值,以备将来使用。

【讨论】:

    猜你喜欢
    • 2018-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-04
    • 2016-12-31
    • 2018-06-07
    • 2014-11-29
    • 1970-01-01
    相关资源
    最近更新 更多