我最近了解到使用SHA256生成盐值密码的哈希方法。在阅读有关盐值密码和安全性的内容后,我发现.NET中有rfc2898derivebytes
和passwordderivebytes
类。相比于常规哈希方法(生成盐值、生成盐值密码并将两者存储在数据库中),使用rfc2898derivebytes
类是否有任何优势?
标准哈希算法(例如SHA256)可以在现代硬件上非常快地生成。
这通常被认为是一件好事,但也有一个缺点:试图破解您密码的不良分子也可以非常快速地生成这些哈希值,这意味着他们可以使用暴力破解相对容易地发现您的密码。
密钥派生算法,如bcrypt和PBKDF2(又名Rfc2898DeriveBytes
),比标准哈希算法慢得多。它们在内部使用标准哈希算法——在Rfc2898DeriveBytes
中为SHA1——但会迭代数千次来生成派生密钥。
因此,尽管使用迭代式密钥派生算法需要进行更多工作才能生成“哈希”,但试图破解您密码的不良分子也必须做更多的工作。这是一件好事。
Rfc2898DeriveBytes
类允许您指定要使用的迭代次数(我认为默认值为 1,000)。使用更多的迭代次数,将使攻击者使用暴力破解更难破解您的密码。