3

我的数据库为每个用户存储唯一的盐。

我正在为一个应用程序在 php 中创建一个登录脚本,其中每个用户都有自己独特的盐,这就是我计划实现登录的方式。

  1. 用户输入详细信息并发送它们
  2. 发送用户名并通过脚本检查它是否存在
  3. 如果是,则返回该用户的盐,否则返回一般错误

我需要脚本为该用户返回盐,否则当我的应用无法在没有盐的情况下散列密码并将其发回时,我的应用程序将如何验证提交的密码是否正确?

现在这就是我不确定的。盐是否被加密是否重要,因为黑客可以看到它是什么并看到密码哈希,也许可以用它做点什么。我应该在发送之前加密盐吗?

也许我不理解/忽略以下回复中的某些内容。

需要的建议请。

4

1 回答 1

1

您的盐是散列还是保留为纯字符串都没有关系- 重要的是,对密码进行加盐可以防止直接使用字典/彩虹表攻击来暴力破解密码。另一个好处是每个用户都有不同的散列密码。

盐是在服务器端创建的随机生成的字符串,不涉及与浏览器之间的任何类型的传输。

在您的服务器上:

  // Password from form
  $pw = $_GET['password'];

  // Generate salt using unique values
  $salt = (rand(8).$registration_date.$username);

  // Password to be hashed
  $pwthb = ($pw.$salt);

如果黑客获得了对您数据库的访问权,那么在大多数情况下,您的游戏就结束了,因为您需要存储初始随机 salt 以对其进行哈希比较。

一个简单的例子:

  1. 用户在注册时在浏览器中输入初始密码
  2. 在您的服务器上,密码与唯一的盐相结合,经过哈希处理并作为密码存储在数据库中
  3. 盐存储在数据库中

注意:散列可以使用 PHP 或 MySQL/DB 函数来完成

当用户返回时:

  1. 用户在浏览器中输入密码
  2. 从数据库中获取盐并与输入的密码结合
  3. 哈希密码+盐并与存储/哈希密码进行比较
  4. 如果它们匹配:验证

在进一步阅读方面,可能值得查看以下内容:

于 2013-04-13T23:56:42.533 回答