如何在数据库表中存储密码

时间:2012-02-26 23:00:58

标签: c# database encryption passwords store

我正在设计一个C#应用程序,我需要将用户的登录信息(包括密码)存储在数据库表中。我想知道这是一个不错的方式。

我知道将密码存储为明文是一个糟糕的主意。

我在考虑加密密码然后存储它们。之后,每次用户输入密码时,我都可以加密输入并将加密输入与数据库中已有的输入进行比较。我的计划是使用一个良好的加密函数...

2 个答案:

答案 0 :(得分:5)

永远不要存储密码。存储密码的哈希值。

请注意,这是不是加密。散列和加密是相关的,但它们并不相同。

您可以做的最好的事情是使用标准密码散列函数,例如bcrypt或pbkdf2。不要重新发明轮子。

This article对如何安全存储密码有很好的描述。

答案 1 :(得分:5)

我认为一种常见的策略是使用SHA-256之类的密码对密码进行哈希并将其存储在数据库中。然后,要登录,您可以对用户输入的内容进行哈希处理,并将其与数据库中的内容进行比较。

此系统意味着您的“加密”是一种方式。给定密码哈希,您无法检索密码。请注意,这会产生可用性后果。具体来说,您无法向用户发送密码。您只能重置密码。

在哈希之前,进一步改进salt密码。这可以防止涉及彩虹表的一类攻击。你几乎肯定会这样做以及散列密码。

正如其他人所提到的,重复这几次以防止暴力攻击也很重要。