PBKDF2和C#问题

时间:2014-12-09 18:11:29

标签: c# security hash pbkdf2

我正在尝试理解这个密钥派生函数,我有一些问题

1)在C#中,似乎Rfc2898DeriveBytes使用SHA1实现它,但我想尝试使用SHA512以获得更高的安全性。如何在C#中将SHA512用于PBKDF2?

2)我读到了有关哈希冲突的内容,但我还没有理解它,所以有适当长度的盐和哈希来获得不错的安全性吗?

1 个答案:

答案 0 :(得分:2)

  在C#中,似乎Rfc2898DeriveBytes使用SHA1实现它,但我想尝试使用SHA512以获得更高的安全性。如何在C#中将SHA512用于PBKDF2?

Rfc2898DeriveBytes现在从.NET Framework 4.7.2开始在构造函数中接受HashAlgorithmName

对于旧版本的.NET:

遗憾的是,这只是Rfc2898DeriveBytes实现的限制,它不允许您指定哈希函数。 SHA512可能有点过分,许多人认为SHA1仍然可以安全使用。然而,很多人使用SHA256。你必须找到另一个实现。 Microsoft创建了另一个名为CLR Security的库,它扩展了System.Security.Cryptography命名空间。

它所做的一件事就是使用微软的CNG API。它确实提供了支持指定哈希函数的PBKDF2实现,包括SHA512。你可以find it on Codeplex。唯一的缺点是,自从Windows Vista / Server 2008中引入CNG以来,它不会在XP或Server 2003上运行。

  

我读到了有关哈希冲突的内容,但我还没有理解它,所以有适当长度的盐和哈希来获得不错的安全性吗?

你的盐应该很长。一个很好的例子可能是salt可能与散列函数的输出大小相同,因此使用SHA512时,您将使用64字节的盐。一般来说,你的盐应该是一个足够大的价值,它不容易被暴力强迫。它也应该是随机的,而不是一些“用户”数据,比如用户名。