PHP - 发送用于散列的密码盐

时间:2013-04-13 22:59:36

标签: php send salt

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

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

  1. 用户输入详细信息并发送
  2. 发送用户名并检查脚本是否存在
  3. 如果是,则返回该用户的salt,否则返回一般错误
  4. 我需要脚本为该用户返回salt,否则我的应用程序如果在没有盐的情况下无法对密码进行散列并将其发送回来,将如何验证提交的密码是否正确?

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

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

    请提供建议。

1 个答案:

答案 0 :(得分:1)

无关紧要如果您的盐被散列或作为普通字符串保留 - 重要的是,使用密码来防止直接使用字典/彩虹表攻击来暴力破解密码。另一个优点是每个用户都有一个不同的散列密码。

Salts是随机生成的字符串,在服务器端创建,不涉及到浏览器的任何传输。

在您的服务器上:

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

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

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

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

一个简单的例子:

  1. 用户在注册时在浏览器中输入初始密码
  2. 在您的服务器上,密码与唯一的盐组合,在数据库
  3. 中进行哈希并存储为密码
  4. Salt存储在DB
  5. 注意:可以使用PHP或使用MySQL / DB函数进行散列

    当用户返回时:

    1. 用户在浏览器中输入密码
    2. 从数据库中获取盐并与输入的密码结合使用
    3. 哈希密码+ salt并与存储/哈希密码进行比较
    4. 如果匹配:验证
    5. 在进一步阅读方面,可能值得研究以下内容: