C# 导出到数据库之前对密码进行salt和hash处理

C# 导出到数据库之前对密码进行salt和hash处理,c#,database,winforms,hash,C#,Database,Winforms,Hash,我已经创建了一个登录系统,并且被告知要对我的密码进行散列和加密。现在,我查看了google、msdn,发现了很多关于哈希和盐析的东西,但似乎不知道怎么做?我想我得到了这个过程: 您获取用户创建的密码并将其散列 这会写入数据库,但同时 您获取散列,并使用security.cryptography中的RGN对其进行加密,然后将加密添加到数据库中 然后,要撤销密码,只需重复该过程,对吗?当您第一次存储密码时,它是这样的: 制造盐 将其连接到密码的末尾 将密码+盐散列 为用户存储哈希字符串和salt 然

我已经创建了一个登录系统,并且被告知要对我的密码进行散列和加密。现在,我查看了google、msdn,发现了很多关于哈希和盐析的东西,但似乎不知道怎么做?我想我得到了这个过程:

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


然后,要撤销密码,只需重复该过程,对吗?

当您第一次存储密码时,它是这样的:

  • 制造盐
  • 将其连接到密码的末尾
  • 将密码+盐散列
  • 为用户存储哈希字符串和salt
  • 然后,当用户尝试登录时:

  • 获取用户的盐
  • 将salt连接到输入密码的末尾
  • 将密码+盐散列
  • 如果哈希字符串与为用户存储的哈希字符串匹配,则密码是正确的

  • 它是这样的,当您第一次存储密码时:

  • 制造盐
  • 将其连接到密码的末尾
  • 将密码+盐散列
  • 为用户存储哈希字符串和salt
  • 然后,当用户尝试登录时:

  • 获取用户的盐
  • 将salt连接到输入密码的末尾
  • 将密码+盐散列
  • 如果哈希字符串与为用户存储的哈希字符串匹配,则密码是正确的

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


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


    你不应该撤销散列,它是一个单向函数……你有没有检查过或其他类似的问题啊,我的错,我以为这只是一个反向重复过程的例子。我到处都找过了,如果我非常诚实,那条线索对我来说毫无意义:(你不应该撤销散列,它是一个单向函数……你有没有检查过或其他类似的问题啊,我的错,我以为这只是一个反向重复过程的例子。我到处都找过,如果我非常诚实的话,那条线索对我来说毫无意义:(哇,这似乎太多了。但是我怎么才能得到用户的salt呢?不是每个用户的salt都不同吗?@tonyb-当你第一次创建一个用户时,你就生成了一个salt(基本上是一个随机字符字符串),并将其与用户的其余数据以及散列密码+salt一起存储在数据库中。因此,在数据库中,我会有用户名、用户类型、salt和散列密码?在程序中,当用户注册时,我会创建一个salt,将其添加到数据库中,然后将其附加到密码中,散列并将其添加到数据库中?@tonyb you应该生成一个新的salt,并在设置新密码时将其与哈希一起存储,而不仅仅是在初始用户注册时哇,这似乎太多了。但是我如何获得用户salt?不是每个用户salt都不同吗?@tonyb-当您第一次创建用户时,您生成了salt(基本上是一个随机字符字符串),并将其与用户的其余数据以及散列密码+salt一起存储在数据库中。因此,在数据库中,我会有用户名、用户类型、salt和散列密码?在程序中,当用户注册时,我会创建一个salt,将其添加到数据库中,然后将其附加到密码中,散列并将其添加到数据库中?@tonyb you应该生成一个新的salt,并在设置新密码时将其与哈希一起存储,而不仅仅是在初始用户注册时