1

我有一个关于在 C# 和 SQL 之间使用盐进行 SHA512 散列的问题。存储哈希的最佳方法是什么,我可以在从网络应用程序将它们保存到数据库后正常吗?当用户登录以验证用户时,以后获取它们是否安全?我可以在 SQL 中创建用户和密码,散列密码并添加盐,然后使用相同的算法在 c# 散列中验证用户,按其大小删除盐并比较两个散列吗?

4

2 回答 2

3

这是一个非常复杂的话题,你真的应该确保你做对了——大多数人都没有。

我见过的最全面的指南是 Les Hazlewood 的How to Secure Passwords - Developer Best Practices演讲,这是我推荐的一个好的开始。

如果不写一本小书,这里没有人能够回答你所有的问题,所以我只能建议观看这个演讲,记下解释的问题、解决方案、工具和技术,然后找到更多关于它们的信息。

或者,您也可以将您的用户处理外包给一些正确执行此操作的公司,例如 Stormpath。您也可以使用OpenIDBrowserID并且根本不关心密码。(虽然我现在不建议使用 BrowserID,至少在可以可靠地验证您自己的服务器上的断言之前不要使用。)

于 2013-01-31T12:47:53.360 回答
1

存储哈希的最佳方法是什么,我可以在从网络应用程序将它们保存到数据库后正常吗?当用户登录以验证用户时,以后获取它们是否安全?

如果您使用的是正确的方法,那么如果您碰巧将所有哈希值转储到 pastebin 上,则不会发生任何事情;由于盐(最好是胡椒),没有人可以对您的哈希做任何事情(因为他们没有无限的时间和计算能力)。

所以是的,您应该简单地将散列存储在适当类型的数据库列中。然后在登录时,您重新散列输入的明文密码并将其与存储在数据库中的密码进行比较。

于 2013-01-31T13:10:37.087 回答