我正在从事一个必须具有身份验证(用户名和密码)的项目
它还连接到一个数据库,所以我想我应该把用户名和密码存储在那里。但是,如果密码只是数据库表中的一个文本字段,这似乎不是一个好主意。
我使用c#并连接到2008年的快速服务器。谁能建议(用尽可能多的例子)存储这类数据的最佳方法是什么?
附:如果有一个好的理由,我可以接受这个信息不存储在数据库中的想法
我正在从事一个必须具有身份验证(用户名和密码)的项目
它还连接到一个数据库,所以我想我应该把用户名和密码存储在那里。但是,如果密码只是数据库表中的一个文本字段,这似乎不是一个好主意。
我使用c#并连接到2008年的快速服务器。谁能建议(用尽可能多的例子)存储这类数据的最佳方法是什么?
附:如果有一个好的理由,我可以接受这个信息不存储在数据库中的想法
当前回答
作为一个密钥加固的咸散列,使用安全算法,如sha-512。
其他回答
最好的安全实践是根本不存储密码(甚至不加密),而是存储加密密码的咸散列(每个密码具有唯一的盐)。
这样(实际上)就不可能检索明文密码。
如果你不需要反向哈希,我会MD5/SHA1密码。当用户登录时,您只需加密给定的密码并将其与哈希进行比较。在这种情况下,哈希冲突几乎是不可能的,除非有人获得了对数据库的访问权,并看到了他们已经发生冲突的哈希。
在你的场景中,你可以看看asp.net会员,这是一个很好的做法,存储用户的密码作为散列字符串在数据库中。您可以通过将散列后的传入密码与存储在数据库中的密码进行比较来验证用户。
所有东西都是为此目的而构建的,请查看asp.net会员
我强烈建议你阅读《足够的彩虹表:关于安全密码方案你需要知道什么》和《如何安全存储密码》这两篇文章。
很多程序员,包括我自己,认为他们理解安全和哈希。可悲的是,我们大多数人就是不这样做。
作为一个密钥加固的咸散列,使用安全算法,如sha-512。