如何在数据库表中存储密码
本文关键字:存储 密码 数据库 | 更新日期: 2023-09-27 18:25:57
我正在设计一个C#应用程序,在该应用程序中,我需要将用户的登录信息(包括密码)存储在数据库表中。我想知道什么是做这件事的好方法。
我知道将密码存储为明文是个糟糕的主意。
我正在考虑加密密码,然后存储它们。之后,每次用户输入密码时,我都可以对他们的输入进行加密,并将加密后的输入与数据库中已有的输入进行比较。我的计划是使用一个好的has函数进行加密。。。
我认为一种常见的策略是使用类似SHA-256的东西对密码进行散列,并将其存储在数据库中。然后为了登录,您对用户输入的内容进行散列,并将其与数据库中的内容进行比较。
这种系统意味着你的"加密"是一种方式。您无法检索给定密码哈希的密码。请注意,这会对可用性产生影响。具体来说,您不能向用户发送密码。您只能重置密码。
进一步的改进是在对密码进行散列之前对其进行加盐处理。这可以防止一类涉及彩虹表的攻击。几乎可以肯定的是,除了散列密码之外,你还应该这样做。
正如其他人所提到的,重复几次以防止暴力攻击也很重要。
永远不要存储密码。存储密码的哈希。
请注意,这是而不是加密。哈希和加密是相关的,但它们并不相同。
你能做的最好的事情就是使用标准的密码哈希函数,比如bcrypt或pbkdf2。不要重新发明轮子。
本文对如何安全地存储密码进行了极好的描述。