php - 用户名、密码、加盐、加密、哈希——这一切是如何运作的?

标签 php mysql security web passwords

Possible Duplicate:
Secure hash and salt for PHP passwords

我在 stackoverflow 和其他网站上阅读了很多关于网络安全的帖子。例如加盐加密等。我有点不明白,所以简单的解释会很有帮助。

这就是我目前所知道的。用户登录时键入他的用户名和密码。输入然后经过一个过程。假设用户名和密码组合在一起,例如:

$username = (USERS USERNAME INPUT);
$password = (USERS PASSWORD INPUT);
$userinput = $username . $password;

然后我们加点盐。

$salt1 = "13$13aVc!kd";
$salt2 = "4kr$!vlmeoc";

$salted = $salt1 . $userinput . $salt2;

然后我们对其进行加密。

$encrypted = encrypt($salted);

然后检查数据库,是否有正确的用户登录。

这就是它的工作原理吗?但我读过暴力攻击。它猜对了输入值吗?通过上面的程序。不就说明攻击者只需要把$userinput信息弄对就可以进去了吗?他不需要猜测长长的 $encrypted 字符串是否正确?

注意:假设在这种情况下没有验证码,没有尝试次数限制,没有锁定,除了上面的那个没有别的。

注意:要温柔,我还在学习。

最佳答案

如果您排除验证码、尝试限制、锁定等……那么是的。您只需要暴力破解纯文本字符串即可。

但是,这确实需要时间 - 至少,它受限于服务器响应登录请求的速度。即使开发者不添加任何防止暴力破解的措施,服务器本身也只能如此快速地完成加密+验证过程,并且只能处理这么多并行请求。

也就是说,这就是为什么它很重要

  • 作为用户,使用强密码,难以暴力破解
  • 作为开发人员,有足够的措施来防止您的登录过程遭到暴力破解

散列密码和加盐密码并不是为了防止有人暴力破解自然登录过程(还有其他方法可以防止这种情况发生)。相反,它们是为了防止密码存储本身受到潜在危害(例如,有人转储数据库的内容)。

散列和加盐都会降低速度,在这种情况下,有权访问存储密码的人可以检索他们需要能够通过自然登录过程(的您的网站或其他网站,假设密码通常在网站之间共享)而不会触发反暴力破解安全措施。

关于php - 用户名、密码、加盐、加密、哈希——这一切是如何运作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14432733/

相关文章:

javascript - 表单不使用 Ajax,直接发布到 PHP

php - 交响乐 2.5 : sql query with Where IN Clause using an array as a parameter

api - 如何限制外部用户使用生产API?

javascript - 保护混合 apk

java - 重复使用 Java 的 SecureRandom

php - 除 WooCommerce 中的特定产品外,最低购物车金额

javascript - 将这段javascript代码放在哪里才能正常工作

php - Laravel 5.1 undefined variable : comments

html - 从 MySQL 输出的特殊字符有效,但是当我添加 charset-utf 8 时它不起作用。为什么?

MySQL 获取过去 12 周周一至周日的订单