2009-02-24 114 views
10

我需要盐和散列一些密码,以便我可以将它们安全地存储在数据库中。 对于如何最好地使用Linq To SQL来做到这一点,您有任何建议或想法吗?使用Linq To SQL盐渍和散列密码

+0

使用本:http://encrypto.codeplex.com/ – Omu 2010-09-14 08:36:43

回答

25

LINQ to SQL在这种情况下没有多大关联。你可以使用任何你想要的机制,因为你不会在SQL中进行哈希和腌制。

保存密码,将沿着这些路线走的步骤:

  1. 收到密码为明文,与用户的ID一起。
  2. 生成(并记住)盐。
  3. 将盐与密码文本相结合,例如,加上它或追加它。
  4. 使用散列函数对结果文本进行散列处理
  5. 将用户ID,散列和盐存储在数据库中。

验证密码就会沿着这些路线走的步骤:

  1. 收到密码为明文,与用户的ID一起。
  2. 从提供的用户ID中检索数据库的散列和盐。
  3. 将盐与提供的密码文本组合在一起。
  4. 用你的散列函数散列结果文本。
  5. 将函数的散列与从数据库中检索的散列进行比较。
  6. 如果它们相同,则提供的密码是正确的。
+0

它是常见为每个密码生成并存储salt,而不是将一个共同的salt与每个收到的密码结合起来?当然,它“似乎”更安全,但是因为盐只是存储在数据库中......只是想知道。 – JMD 2009-02-24 17:24:31

1

基本上如@Vojislav所说。

你可能想看看bcrypt的哈希 - 它被誉为非常好。

0

如果是用户帐号登录你不想只是盐+密码哈希,您还希望按照RFC2898文档中的PBKDF2使用密钥扩展。

这里是API做你需要使用例子是什么: https://sourceforge.net/projects/pwdtknet

在指定的长度也创建加密随机盐