Tag: pbkdf2

.NET:PasswordDeriveBytes和Rfc2898DeriveBytes之间的区别

我正在尝试理解一些C#代码,我已经处理了密码学,并且特别使用了System.Security.Cryptography PasswordDeriveBytes 。 在.NET文档中 ,它说PasswordDeriveBytes使用“PBKDF1算法的扩展”,后面在指定为“PKCS#5 v2.0标准”的文档中,这是PBKDF2(据我所知)。 我发现网上的任何地方(包括这里的Stack Exchange),但每个人都说“使用Rfc2898DeriveBytes,导致密码*被弃用并使用PBKDF1”。 但msdn.microsoft.com上文档的唯一区别似乎是Rfc * -version特别提到了PBKDF2,其中Password *表示“PBKDF1的扩展”和“PKCS#5 v 2.0”。 那么,任何人都可以告诉我两个类之间的区别(如果有的话)以及为什么我应该使用一个而不是另一个用于PBKDF2密码密钥推导? 现在,处理相同数据的其他代码明确使用PBKDF2,并且可以工作,因此这表明PasswordDeriveBytes确实也使用PBKDF2,或者在某些情况下PBKDF2只与PBKDF1兼容,但我想确切地知道这不是一些随机事物的副作用,并且事情只是神奇地起作用(并且最终可能会神奇地和惊人地突破)而没有人真正理解为什么。

使用Rfc2898DeriveBytes在C#中实现PBKDF2

伙计们,我正在尝试在C#中实现一个创建WPA共享密钥的PBKDF2函数。 我在这里找到了一些: http : //msdn.microsoft.com/en-us/magazine/cc163913.aspx似乎产生了一个有效的结果,但是它的一个字节太短了……而且错误的PSK值。 为了测试输出,我将其与此进行比较: http : //www.xs4all.nl/~rjoris/wpapsk.html或http://anandam.name/pbkdf2/ 我确实找到了一种方法来使用C#内置库来调用Rfc2898DeriveBytes。 使用这个,我得到一个有效的输出: Rfc2898DeriveBytes k3 = new Rfc2898DeriveBytes(pwd1, salt1, 4096); byte[] answers = k3.GetBytes(32); 现在,我使用Rfc2898DeriveBytes的一个限制是“盐”必须是8个八位字节长。 如果它更短,则Rfc2898DeriveBytes会抛出exception。 我想我所要做的就是将盐(如果它更短)填充到8个字节,我会很好。 但不是! 我已经尝试了几乎所有填充与较短盐的组合,但我不能复制我从上面这两个网站得到的结果。 那么底线是,这是否意味着Rfc2898DeriveBytes只是不能使用短于8字节的源盐? 如果是这样,有没有人知道我可以使用哪些C#代码为WPA预共享密钥实现PBKDF2?

C#PasswordDeriveBytes混淆

我在C#中有以下代码 PasswordDeriveBytes DerivedPassword = new PasswordDeriveBytes(Password, SaltValueBytes, HashAlgorithm, PasswordIterations); byte[] KeyBytes = DerivedPassword.GetBytes(32); 我正在使用“SHA1”哈希算法。 根据SHA1定义,它生成160位(20字节)密钥。 我的问题是GetBytes方法如何从DerivedPassword中获取32个字节,GetBytes方法后面使用了什么算法?