使用Linq To SQL进行Salting和Hashing密码

时间:2009-02-24 16:58:25

标签: c# .net database linq-to-sql

我需要对一些密码进行加密和散列,以便我可以将它们安全地存储在数据库中。 您对使用Linq To SQL的最佳方法有任何建议或想法吗?

4 个答案:

答案 0 :(得分:25)

LINQ to SQL在这种情况下没有多大关系。您可以使用任何您想要的机制,因为您不会在SQL中进行散列和salting。

保存密码的步骤如下:

  1. 以明文形式接收密码以及用户ID。
  2. 生成(并记住)盐。
  3. 将salt与密码文本合并,例如前置或附加它。
  4. 使用哈希函数哈希结果文本
  5. 将用户ID,哈希和salt存储在数据库中。
  6. 验证密码的步骤将遵循这些方针:

    1. 以明文形式接收密码以及用户ID。
    2. 从数据库中检索散列和salt以获取所提供的用户ID。
    3. 将salt与提供的密码文本合并。
    4. 使用哈希函数散列结果文本。
    5. 将函数的散列与从DB中检索的散列进行比较。
    6. 如果它们相同,则提供的密码是正确的。

答案 1 :(得分:3)

由于您使用的是.NET和C#,因此可以使用System.Security.Cryptography.SHA512Managed命名空间生成salt值和密码哈希

答案 2 :(得分:1)

基本上@Vojislav说。

您可能希望查看bcrypt的哈希值 - 它被认为非常好。

答案 3 :(得分:0)

如果是用户帐户登录,你不想只需要使用salt +密码哈希,你也想在RFC2898文件中按照PBKDF2使用密钥拉伸。

以下是使用示例用法执行所需操作的API: https://sourceforge.net/projects/pwdtknet

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