【问题标题】:sha1(password) encryptionsha1(密码)加密
【发布时间】:2011-03-03 13:40:56
【问题描述】:

好的,所以我尝试通过在用户注册时输入密码时添加" . sha1($_POST['password']) . " 来使用户信息超级安全。效果很好,查看数据库,我不知道他们的密码是什么。

现在问题是登录。我正在运行一些测试,当我尝试登录时,密码 12345 与使用 $password=sha1($_POST['mypassword']); 加密的密码不匹配

知道为什么吗?

【问题讨论】:

  • 您是说您正在对密码进行哈希处理,将其存储在数据库中,然后稍后再次对其进行哈希处理并得到不同的结果?你做错了什么(sha1 总是为给定的输入返回相同的输出),但我们没有足够的信息来知道是什么
  • 你的数据库中的哈希是8cb2237d0679ca88db6464eac60da96345513964吗?
  • sha1('12345') 将始终等于 sha1('12345')。您存储的 $_POST['mypassword'] 的值是否有任何错误?
  • 另外,您的设计很容易受到攻击。黑客仍然可以通过对一些常见密码运行 sha1() 并将它们与这些字符串进行比较来猜测人们的密码。要解决此问题,您需要添加“盐”。在 Google 上搜索“salt cryptography”以了解更多信息。
  • 也许还可以在哈希中添加一些盐@dmazzoni,你更快:-)

标签: php passwords sha1


【解决方案1】:

仔细检查数据库中密码列的大小...确保它包含整个 sha1 哈希值。 (varchar(40))

在对密码进行哈希处理时,raw_output 参数的值是多少?如果为真,那么您的返回是一个 20 个字符的二进制字符串;如果为 false,则为 40 个字符的 ASCII 字符串。如果前者,请确保您可以在数据库中存储二进制值,或者改为使用后者。

【讨论】:

  • 马克你是 100% 正确的,长度是 32。谢谢@dmazzoni,我现在正在研究盐。这是一项全职工作。
  • 看看 Josh K 对stackoverflow.com/questions/3038136/… 关于加盐的回答......这是一个很好的简单示例
  • 正如其他人指出的那样,您应该对密码进行加盐...更好的是,使用 PBKDF2 (en.wikipedia.org/wiki/PBKDF2)。最近版本的 PHP 已经有一个内置函数 hash_pbkdf2。如果您使用的是旧版本的 PHP,您可以使用链接到 Wikipedia 文章中“实现”下的 PHP 实现。
  • @VinayPai 较新版本的 PHP 也有 password_hash()password_verify()
猜你喜欢
  • 2012-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-26
相关资源
最近更新 更多