我正在创建一个用户登录功能,但我看到了关于执行此操作的最佳方法的不同意见。
这是我想做的...
- 使用基于子字符串的 2 个哈希盐对用户名进行哈希处理 用户名。
- 使用 2 个随机生成的哈希盐对密码进行哈希处理,这些盐保存在 包含密码和用户名的表格。
这是矫枉过正、错误甚至不够安全吗?
最佳答案
加盐可以防止彩虹表,所以有 2 个盐不会比 1 个好。黑客需要知道盐才能用彩虹表破解你的密码,他们唯一能做到的方法是如果他们有权访问数据库表。如果他们有,他们无论如何都有两种盐。
密码越长,暴力破解就越难,因此密码越长越好。
每次从数据库中读取用户名时,对用户名进行加盐和散列处理都会增加不必要的开销。使用密码,您只需在登录时加盐和散列。
理想情况下使用像 BCrypt 这样的东西其中加密哈希函数可以随时间自适应地减慢为 moore's law继续。这将减少暴力攻击的可能性。
关于php - 在 php 中散列(用盐)用户名和密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11347261/