代码之家  ›  专栏  ›  技术社区  ›  Jagmag

.NET3.5-使用System.Cryptography散列密码

  •  1
  • Jagmag  · 技术社区  · 15 年前

    其目的是使用用户创建时管理的SHA256对密码进行单向咸哈希,然后使用相同的方法验证用户。 理想情况下,我们不想使用任何第三方dll的哈希算法,除非绝对必要,以避免任何不必要的依赖关系。

    Questions:- 1.有没有比做盐腌单向散列更好的选择? 3.SHA256在System.Cryptography中的管理实现在it速度等方面是否足够好,或者我们是否应该考虑第三方替代方案?

    任何关于方法/实现的指针都会有所帮助。

    5 回复  |  直到 15 年前
        1
  •  0
  •   DmitryK    15 年前
    1. 是的,视网膜扫描(开玩笑)。用盐散列存储密码是正确的方法。
    2. SHA256很好。显然,我不知道您正在处理的应用程序的类型,但是SHA256适合绝大多数项目。如果需要,您可以选择更高的密钥长度(384512)。咨询您的安全架构师。
    3. SHA256Managed(我们说的是.net,对吧?)很好。我们在项目中使用它。

    http://www.obviex.com/samples/hash.aspx

        2
  •  2
  •   CubanX    12 年前

    那天我做了一些研究,大家一致认为BCrypt是做单向散列的最好方法之一。

    您可以在这里看到C实现: http://derekslager.com/blog/posts/2007/10/bcrypt-dotnet-strong-password-hashing-for-dotnet-and-mono.ashx

    另外,BCrypt的优点是你可以决定你希望它通过多少轮。

    例如,您可以使加密大约需要1秒。对于一个用户来说,这是一个可以接受的等待时间,但是对于一个试图用暴力攻击你的人来说,1秒是永恒的。

    此外,阿特伍德在这方面给出了一些建议: http://www.codinghorror.com/blog/2007/09/youre-probably-storing-passwords-incorrectly.html

    更新 :

    自从回答了这个问题之后,NuGet使使用BCrypt变得更加容易: http://nuget.org/packages?q=bcrypt

        3
  •  0
  •   Dean Harding    15 年前

    是的,SHA256没有问题,当然SHA256Managed对于大多数用例来说“足够快”(我相信你不会期望每秒验证1000个登录请求,即使你是,站点的其他部分仍然会使登录请求相形见绌……)

    但是你考虑过 Membership 框架内置的东西?他们已经完成了安全存储凭据和实现所有支持功能(如密码重置等)方面的所有艰苦工作

        4
  •  0
  •   Joel Coehoorn    15 年前

    存储密码散列与盐它正确。然而,即使是这样的错误也很容易发生。当然,现在SHA256可以阻止坏人,但是再过几年。突然间,SHA256似乎不再那么安全了。你需要使用 BCrypt ,一个 散列算法。

        5
  •  0
  •   thashiznets    12 年前

    只做一次SHA256的问题是它太快了,一个有很好的硬件可以很容易地为很多盐生成彩虹表…为了解决这个问题,你需要执行键拉伸…kI不会给你一个关于键拉伸的课程,但是人们谈论的bcrypt实现执行键拉伸。如果您想要一个比bcrypt(在.NET中使用HMACSHA256或512)更现代的替代方案,我建议您使用以下API:

    https://sourceforge.net/projects/pwdtknet/