database - 在密码加密中使用随机盐?

标签 database encryption hash passwords

我看过一些关于这个主题的其他话题,但我似乎无法找到一些涉及在密码加密中使用随机盐的问题的答案。据我了解,这些步骤是这样的:

  1. 为用户生成随机盐。
  2. 将盐附加到他们的密码。
  3. 使用 SHA-2 之类的算法对结果进行哈希处理。
  4. 将加盐密码和散列密码都存储在数据库中。

此方法在检索用户密码和验证登录时如何工作?一种回应说应该检索用户的盐,附加到他们输入的密码,散列,然后与存储的散列进行比较,但这不会引发一些问题吗?即:

  • 如何在不危及该用户的情况下取回盐?如果有人想暴力破解某个帐户的密码,他们是否无法检索从服务器发回的盐来对输入的密码进行哈希处理,从而消除盐增加的安全性?
  • 如果我们通过在服务器端进行盐检索来避免之前的问题,那么我们是否会在某一时刻发送未加密的用户输入密码(以便稍后可以将其附加到检索到的盐中)?

最佳答案

盐不应该暴露在服务之外 - 你的直觉是正确的,这会暴露盐并引入风险。

您的客户端和服务器之间的任何通信都应通过 SSL 连接进行 - 或者至少使用某种交互加密。

请记住加盐的目的:让某人更难预先计算哈希码,从而在数据库遭到破坏的情况下能够查找密码。 8 位盐使散列空间大 256 倍,使预先计算变得更加困难。加盐与确保通信安全无关 - 还有其他解决方案。

关于database - 在密码加密中使用随机盐?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4021065/

相关文章:

java - 非法 block 大小异常 : Input length must be multiple of 8 when decrypting with padded cipher

python - python中最短的哈希来命名缓存文件

PHP/SQL 简单点击计数器按钮

mysql - 我的网站上没有用户,但 MySQL 数据库连接数始终为 10+

java - 使用 AES/RSA 在 Java 中加密和解密数据

iphone - 保护 Coredata 对象的安全

swift - Bool.hashValue 转换为 Int 有效吗?

java - 我们是否必须为放在 HashMap 中的枚举覆盖 equals/hashcode

c# - 必须使用 OUTPUT INTO 声明标量变量 '@ID'

database - playframework: -- 数据库/测试框架/缓存错误