哪个是ASP.NET中最好的哈希算法,可用于在数据库中存储密码?

时间:2014-10-11 15:06:33

标签: asp.net algorithm hash

我正在为经过身份验证的用户可访问的金融机构开发ASP.NET Web应用程序。根据要求,需要对每个用户的密码进行加密,以便数据库管理员无法访问任何用户的密码。我已经完成了各种类型的加密和散列算法,但不确定哪种算法最符合我的要求。

1 个答案:

答案 0 :(得分:1)

尽可能防止密码存储在一起,例如使用Windows身份验证。如果无法做到这一点,请使用行业最佳实践来存储密码。这意味着你应该:

  • 使用密码哈希(不加密)
  • 向哈希值添加salt
  • 使用计算密集型散列算法。

存储密码的最大危险是,当有人闯入您的系统(或您的DBA窃取他们)时,成千上万用户的密码会受到损害。虽然您可以在系统中使用每个用户的密码,但用户通常会反复使用相同的密码,这意味着用户在密码泄露时会面临风险。当然,重复使用密码当然是不好的做法,这就是用户所做的事情,我们的工作是至少通过做我们能力范围内的任何事情来最小化用户的风险。不要忘记,如果不这样做,甚至可能导致贵公司被起诉。这发生在LinkedIn。

因此,对于密码散列,这实际上意味着使用MD5和SHA进行密码散列(即使使用salting)也是无用的,因为这些算法针对速度进行了优化,这使得黑客每秒可以计算2300万次盐渍哈希(蛮力)。 / p>

一些众所周知的计算密集散列算法是PBKDF2,Bcrypt,PBMAC和scrypt。在.NET中,有一个名为Rfc2898DeriveBytes的PBKDF2实现。 Here's a good example使用Rfc2898DeriveBytes(具有可配置的计算密集度,允许此方法允许承受不断增加的计算机计算能力)。

使用一些实现最佳实践的知名框架也是一个好主意。 @trailmax已经提出了使用PBKDF2的AspNet Identity框架。但是,请不要使用ASP.NET的SqlMembershipProvider,因为它默认使用SHA,而实际上很难重新配置它以使用安全的方法。