使用Linq To SQL进行密码加盐和哈希处理

10

我需要对一些密码进行盐值加密,以便将其安全地存储在数据库中。您是否有任何关于如何使用Linq To SQL来最佳完成此任务的建议或想法?


请使用这个网站:http://encrypto.codeplex.com/ - Omu
4个回答

25

LINQ to SQL在这种情况下没有太多相关性。您可以使用任何机制,因为您不会在SQL中进行哈希和盐处理。

保存密码的步骤如下:

  1. 接收明文密码以及用户ID。
  2. 生成(并记住)盐。
  3. 将盐与密码文本结合,例如在其前面或后面添加盐。
  4. 使用您的哈希函数对生成的文本进行哈希处理。
  5. 将用户ID、哈希值和盐存储在数据库中。

验证密码的步骤如下:

  1. 接收明文密码以及用户ID。
  2. 从数据库中检索提供的用户ID的哈希值和盐。
  3. 将提供的密码文本与盐结合。
  4. 使用您的哈希函数对生成的文本进行哈希处理。
  5. 将哈希函数生成的哈希值与从数据库检索到的哈希值进行比较。
  6. 如果它们相等,则提供的密码正确。

生成并存储每个密码的盐,而不是使用一个通用盐与每个接收到的密码组合,这种做法常见吗?尽管这样做“似乎”更安全,但由于盐仍然只是存储在数据库中...我只是想知道。 - JMD
是的,绝对需要每个用户单独的盐值 - 考虑一个攻击者拥有散列密码数据库。使用每个用户单独的盐值,他所猜测的每个密码只能与一个条目进行比较,而使用一个盐值,他可以将其与所有散列密码进行比较。 - Douglas Leeder
彩虹表万岁,盐越多越好。 - ShuggyCoUk
非常感谢您,Vojislav, 现在我将采取您的建议,希望一切顺利! 干得好。 - JayJay
这应该在某个地方成为自己的帖子。非常好的解释。 - rik.the.vik

3

1

基本上就像@Vojislav所说的那样。

你可能想要看一下bcrypt用于哈希 - 据说非常好。


0
如果是用于用户账户登录,你不仅需要使用盐值+密码哈希,还需要按照RFC2898文档中的PBKDF2使用密钥拉伸。
这里有一个API可以满足你的需求,并提供了示例用法: https://sourceforge.net/projects/pwdtknet 同时,它还可以创建指定长度的加密随机盐。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接