PHP -发送用于哈希的密码盐


PHP - Sending password salt for hashing

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

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

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

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

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

也许我在下面的回复中没有理解或忽视一些东西。

并不重要如果你的盐是散列的还是作为普通字符串留下的-重要的一点是盐密码可以防止直接使用字典/彩虹表攻击来暴力破解密码。另一个好处是,每个用户都有一个不同的散列密码。

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

在您的服务器上:

  // 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. 在您的服务器上,密码与唯一的盐组合,散列并作为密码存储在DB
  3. 盐存储在DB

注意:哈希可以使用PHP或使用MySQL/DB函数

用户返回时:

  1. 用户在浏览器中输入密码
  2. 从DB中抓取盐,并结合输入的密码
  3. 哈希密码+盐,并与存储/哈希密码进行比较
  4. 如果匹配:authenticate

就进一步阅读而言,以下内容可能值得一看:

  • 用密码/明文加密盐值是直接哈希的可行替代方案吗?
  • 隐藏哈希的盐的必要性
  • 如何在分布式环境中储存盐