【问题标题】:Different MD5 hash with the same value [closed]具有相同值的不同MD5哈希[关闭]
【发布时间】:2017-04-30 15:52:09
【问题描述】:

我正在做一个注册页面,我用md5加密了用户的密码,当我每次尝试登录时登录页面都说密码错误,所以我检查了md5哈希是否与数据库,但它不是,我确定密码是正确的。我在登录页面和注册页面也使用相同的代码:$password = md5($password)

【问题讨论】:

  • 问题是“为什么”你使用 MD5?密码存储不再安全,请使用password_hash()/password_verify()
  • 我猜你的列太短了,无法存储完整的哈希值。另请注意md5 不是加密并且已过时。添加您的代码可能有助于解决问题。
  • 我尝试使用 password_hash 顺便说一句,我自己做的,只是为了好玩,我不太关心安全性,但感谢您提供的信息
  • “我尝试使用 password_hash” - MD5 和 password_hash()'d pw 是两种不同的动物。问题不清楚并且缺乏细节/代码等。“我并不真正关心安全” - 你应该。
  • 仅使用散列函数是不够的,仅添加盐对提高安全性无济于事。而是使用随机盐迭代 HMAC 约 100 毫秒的持续时间,然后将盐与哈希一起保存。使用PBKDF2Rfc2898DeriveBytespassword_hashBcrypt 等函数或类似函数。关键是让攻击者花费大量时间通过蛮力寻找密码。对于 PHP,最简单、最安全的方法是使用 password_hashpassword_verify

标签: php pdo hash md5 registration


【解决方案1】:

你让它变得比必要的复杂。请参阅:password_hashpassword_verify

注意:小心 强烈建议您不要为此函数生成自己的盐。如果您不指定,它将自动为您创建一个安全的盐。

见:Hashing Passwords with the PHP

创建密码哈希:

$hash = password_hash($password, PASSWORD_DEFAULT);

确保将哈希值存储在容量超过 60 个字符的列中。

验证密码:

if (password_verify($password, $hash)) {
    // Success!
}
else {
    // Invalid credentials
}

【讨论】:

  • 成功了!感谢您的耐心等待和帮助!
猜你喜欢
  • 2021-05-04
  • 2011-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-23
  • 2017-01-24
  • 2015-02-25
相关资源
最近更新 更多