【问题标题】:salting and hashing passwords before exporting to database在导出到数据库之前对密码进行加盐和哈希处理
【发布时间】:2013-10-04 04:05:47
【问题描述】:

我创建了一个登录系统,并被告知要对我的密码进行散列和加盐。现在,我查看了 google、msdn、SO,发现了很多关于 hashing 和 salting 的东西,但似乎不明白该怎么做?我想我明白了这个过程:

您获取用户创建的密码并对其进行哈希处理 这是写入数据库,但同时 您获取哈希,并使用 security.cryptography 中的 RGN 对其进行加盐,然后将加盐添加到数据库中

然后要撤消它,只需重复该过程,对吗?

【问题讨论】:

  • 你不应该能够撤消哈希,它是一个单向函数...
  • 你检查过stackoverflow.com/questions/2138429/…或其他类似的问题
  • 啊,我的错,我认为这只是反向重复该过程的情况。我到处看了看,如果我诚实地说,那条线对我来说毫无意义:(

标签: c# database winforms hash


【解决方案1】:

当你第一次存储密码时是这样的:

  1. 生成盐。
  2. 将其连接到密码的末尾。
  3. 散列密码+盐。
  4. 为用户存储散列字符串和盐。

那么当用户尝试登录时:

  1. 获取用户的盐。
  2. 将盐连接到输入密码的末尾。
  3. 散列密码+盐。
  4. 如果散列字符串与为用户存储的散列字符串匹配,则密码正确。

【讨论】:

  • 哇,这似乎很多。我如何让用户加盐?不是每个用户的盐都不一样吗?
  • @tonyb - 当您第一次创建用户时,您会生成一个盐(基本上是一串随机字符),并将其与用户的其余数据以及散列密码一起存储在数据库中+盐。
  • 所以在数据库中我会有用户名、用户类型、盐和散列密码?在程序中,当用户注册时,我会创建一个盐,将其添加到数据库中,然后将其附加到密码中,对其进行哈希处理并将其添加到数据库中?
  • @tonyb 您应该在设置新密码时生成新盐并将其与哈希一起存储,而不仅仅是在初始用户注册时
【解决方案2】:

我在这里的另一篇文章中用示例解释了整个过程:

Salting passwords 101

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-01
    • 2020-05-23
    • 2019-04-21
    • 1970-01-01
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多