如何在C#中存储salt和散列密码数据库

时间:2014-12-01 07:52:53

标签: c# sql-server-2008-r2

我在ASP.Net Web应用程序中的登录功能我计划采用更好的安全方式,因此我搜索了很多内容,最后我找到了:CrackStation.net。这真是太神奇了......问题是他们没有提到如何在数据库中存储盐和哈希密码。这是Crack Station上的代码。我还有一个DotNetFiddle Snippet您可以在浏览器中运行。

我想知道如何在数据库中存储密码(slat和hash都连接并保存在一列中)或(每个在不同的列中,例如salt是salt列,hash是hash列)...

请逐步解释密码salting和散列处理,以便保存在数据库中并从数据库中检索并进行变换...

盐和哈希值是否相同?

我们什么时候生成盐(随机盐)?为什么我们在sql数据库中的单独列中保存salt?在我们需要使用的数据库列中保存了盐?

请明确提及。 (任何源代码示例。)

谢谢。

2 个答案:

答案 0 :(得分:1)

我不确定你想要什么。

只是为了向您展示一个回答这个问题的例子

;WITH cte
     AS (SELECT 1 AS rn
         UNION ALL
         SELECT rn + 1
         FROM   cte
         WHERE  rn < 3) -- Count
SELECT id
FROM   cte
       CROSS JOIN (SELECT 1003 id) B 

答案 1 :(得分:1)

  1. 它没有多大区别,你可以在单独的列中使用salt和hash,或者将它们连接起来并将它们放在一列(clarification)中。将它们放在单独的列中会更容易。
  2. 在计算哈希值之前创建salt。
  3. 验证密码是否正确:

    • 通过a将候选密码(CP)传输到您的服务器 安全通道
    • 从数据库中检索哈希(H)和salt(S)。
    • 使用候选密码(CP)和盐(S)
    • 计算候选散列(CH)
    • 将候选散列(CH)与散列(H)
    • 进行比较

    确保没有哈希或盐传输到客户端。