我想了解这个关键的推导函数,我有一些疑问

1)在C#中,似乎Rfc2898DeriveBytes用SHA1实现了它,但是我想尝试使用SHA512来提高安全性。如何在C#中将SHA512用于PBKDF2?

2)我读到有关哈希冲突的文章,但我还不了解,因此,盐和哈希的正确长度是多少,才能具有不错的安全性?

最佳答案

在C#中,似乎Rfc2898DeriveBytes用SHA1实现了它,但是我想尝试使用SHA512来提高安全性。如何在C#中将SHA512用于PBKDF2?


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

对于旧版本的.NET:

不幸的是,这只是实现Rfc2898DeriveBytes的一个限制,它不允许您指定哈希函数。 SHA512可能过大了,许多人认为SHA1仍然可以安全使用。但是,许多人确实使用SHA256。您将不得不找到另一个实现。微软制作了另一个名为CLR Security的库,该库扩展了System.Security.Cryptography命名空间。

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


  我读过有关散列冲突的信息,但我还不了解,因此,盐和散列的正确长度是多少,才能具有不错的安全性?


你的盐应该很长。一个很好的例子可能是salt的大小可以与哈希函数的输出大小相同,因此对于SHA512,您将使用64字节的salt。通常,您的盐应该足够大以至于不能轻易被强行使用。它也应该是随机的,而不是某些“用户”数据,例如用户名。

关于c# - PBKDF2和C#问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27385859/

10-09 19:52