ASP.NET中用于在数据库中存储密码的最佳哈希算法是什么?

ASP.NET中用于在数据库中存储密码的最佳哈希算法是什么?,asp.net,algorithm,hash,Asp.net,Algorithm,Hash,我正在为一家金融机构开发ASP.NET web应用程序,通过身份验证的用户可以访问该应用程序。作为一项要求,每个用户的密码都需要加密,这样数据库管理员就不能访问任何用户的密码。我已经使用过各种类型的加密和哈希算法,但不确定哪种算法最适合我的要求。只要有可能,就防止将密码全部存储在一起,例如使用Windows身份验证。如果不可能,请使用业界存储密码的最佳做法。这意味着您应该: 使用密码哈希(非加密) 在肉馅里加一点盐 使用计算密集型哈希算法 存储密码的最大危险是,当有人闯入您的系统(或者您的D

我正在为一家金融机构开发ASP.NET web应用程序,通过身份验证的用户可以访问该应用程序。作为一项要求,每个用户的密码都需要加密,这样数据库管理员就不能访问任何用户的密码。我已经使用过各种类型的加密和哈希算法,但不确定哪种算法最适合我的要求。

只要有可能,就防止将密码全部存储在一起,例如使用Windows身份验证。如果不可能,请使用业界存储密码的最佳做法。这意味着您应该:

  • 使用密码哈希(非加密)
  • 在肉馅里加一点盐
  • 使用计算密集型哈希算法
存储密码的最大危险是,当有人闯入您的系统(或者您的DBA窃取了他们)时,成千上万用户的密码就会被泄露。虽然您可以在系统中查看每个用户的密码,但用户通常会反复使用相同的密码,这意味着当用户的密码被泄露时,用户将面临风险。当然,重复使用密码是不好的做法,这是用户所做的,我们的工作是通过做任何我们力所能及的事情,至少将用户的风险降至最低。不要忘记,不这样做,甚至可能会导致你的公司被起诉。LinkedIn就是这样

因此,对于密码散列,这实际上意味着使用MD5和SHA(即使使用satting)的密码散列是非常无用的,因为这些算法针对速度进行了优化,黑客可以每秒计算23亿个satted散列(蛮力)

一些著名的计算密集型哈希算法有PBKDF2、Bcrypt、PBMAC和scrypt。NET中有一个名为的PBKDF2实现。使用Rfc2898DeriveBytes(具有可配置的计算强度,允许此方法承受不断增加的计算机计算能力)


使用一些实现最佳实践的知名框架也可能是一个好主意@trailmax已经提出了使用PBKDF2的AspNet身份框架。但是,请避免使用ASP.NET的
SqlMembershipProvider
,因为它默认使用SHA,并且实际上很难将其重新配置为使用安全方法。

使用MS提供的AspNet标识框架。它为您提供哈希和其他安全措施。不要自己编写安全框架,很可能会把它弄得一团糟。相关: