我无法理解使用加盐将用户数据存储在数据库表中的好处。我设置的流程如下:
- 用户使用用户名/密码创建帐户
- 生成随机盐。
- 用户名存储在数据库中,密码加密并存储,salt 与密码一起存储。
现在,当用户尝试登录时,他们会提供他们的用户名/密码,并且:
- 根据用户名在数据库中查找盐。
- 加密使用数据库中的盐提供的明文密码。
- 比较存储的密码和用户提供的密码。
这一切都很好而且很花哨,但是黑客不只需要猜测用户名和密码的组合吗?只要他们可以确定用户名,他们就可以检索盐。使用蛮力攻击,他们只需要确定正确的用户名/密码组合。将仅使用用户名检索盐并将其添加到提供的密码中以与存储的密码进行比较,那么无论如何使用盐有什么意义呢?它不像黑客必须猜测盐值。他们提供的密码会自动使用数据库中的盐进行加密,因此只要他们知道用户名,只需以明文形式猜测密码即可。