【问题标题】:Lifespan of hashed/salted passwords散列/加盐密码的使用寿命
【发布时间】:2016-01-12 15:50:32
【问题描述】:

虽然我了解加密和散列密码的过程背后的神学,但我不太了解方法。据我所知,this question 中列出的方法及其相关答案以及此MSDN article 都经过步骤创建不同长度的盐,以在对给定密码进行哈希处理的过程中使用。

但是,以后检查密码怎么样?据我所知,重新创建哈希将导致生成一个全新的盐,最终导致尝试登录时验证失败。

我是否错过了盐或盐配方的保存位置?还是我不是很了解这个过程?

【问题讨论】:

  • 当您将密码与生成的盐一起散列时,您将盐以明文形式存储在某处
  • @72DFBF5BA0DF5BE9 那么我认为这些例子没有证明这一点是正确的吗?此外,在服务器上运行的方法中硬编码盐是否同样有效?
  • 静态单盐并不好,仍然会大大减慢破解过程,但不如每个密码的动态盐。我没有检查这些示例,但我确定您将用户名、密码哈希和盐存储在数据库中。当用户重新输入密码时,你附加盐,散列并检查它。
  • @72DFBF5BA0DF5BE9 我明白了,所以每个密码肯定只生成一次盐?
  • 是的,确保每次新密码都是随机的

标签: c# hash passwords salt


【解决方案1】:

你应该:

  1. 为您要散列的每个密码创建一个新盐
  2. 散列密码
  3. 将哈希值和盐值都保存为纯文本

当您想要验证您的用户时,您只需使用之前保存在数据库中的盐再次计算哈希,然后比较您的哈希。

这里是an excellent article,详细解释了该过程。它还提供了complete C# implementation

【讨论】: