用户名,密码,盐渍,加密,哈希 - 它们如何运作?

Jo *_* E. 11 php mysql security passwords web

可能重复:
PHP密码的安全散列和盐

我在stackoverflow和其他网站上阅读了很多关于网络安全的帖子.比如加盐加密等等.我有点不明白,所以一个简单的解释会非常有用.

所以这就是我到目前为止所知道的.用户登录他的用户名和密码.输入然后经历一个过程.可以说用户名和密码组合起来就像例如:

$username = (USERS USERNAME INPUT);
$password = (USERS PASSWORD INPUT);
$userinput = $username . $password;
Run Code Online (Sandbox Code Playgroud)

然后我们添加一些盐.

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

$salted = $salt1 . $userinput . $salt2;
Run Code Online (Sandbox Code Playgroud)

然后我们加密它.

$encrypted = encrypt($salted);
Run Code Online (Sandbox Code Playgroud)

然后检查数据库以及其正确的用户是否登录.

这是怎么回事?但是我读到了关于蛮力攻击的内容.它猜对了输入值吗?用上面的程序.是不是表明攻击者只需要获取$ userinput信息就可以进入?他不需要猜测长$加密字符串是否正确?

注意:让我们说在这种情况下没有验证码,没有尝试次数限制,没有锁定,除了上面的那个之外别无其他.

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

Amb*_*ber 8

如果排除验证码,请尝试限制,锁定等等......然后是.你只需要强制纯文本字符串.

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

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

  • 作为用户,使用强大,难以暴力的密码
  • 作为开发人员,请采取适当措施防止您的登录过程暴力破解

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

这两个散列和盐腌起到降低速度,在这有人访问存储的密码可以检索纯文本字符串,他们会需要能够去通过自然登录过程(您的网站或其他网站,因为密码通常在站点之间共享)而不会绊倒反暴力安全措施.