2012-02-11 26 views
1

我有下面的代码在C#PBKDF在加密+

PasswordDeriveBytes DerivedPassword = new PasswordDeriveBytes(Password, SaltValueBytes, 
               HashAlgorithm, PasswordIterations); 
byte[] KeyBytes = DerivedPassword.GetBytes(32); 

NET的PasswordDeriveBytes使用PBKDF1。我正在使用“SHA1”散列算法来生成32字节密钥。

请告诉我如何在crypto ++中实现这一点。在使用PBKDF2的crypto ++中,它生成20个字节的密钥。我怎样才能让C#生成的32字节密钥。

回答

2

你不能,因为PasswordDerivedBytes不是标准的PBKDF1,而crypto ++实现是。改为使用PBKDF2实现(.NET中的Rfc2898DeriveBytes)。

+0

由于某些原因,我无法更改C#的代码,我必须使用C++解密C#加密文件。在C++中,我使用加密++库,并且我得到了20个字节,与加密++中生成的C#相同。但是无法找到12字节的剩余部分,这就是为什么我全面询问这些问题的原因。并且非常感谢您的帮助,您对我真的很有帮助。 – Siddiqui 2012-02-11 19:05:54

+0

@Siddiqui:参见poupou的回答[你的早期问题](http://stackoverflow.com/questions/9231754/c-sharp-passwordderivebytes- confusion)。 – 2012-02-11 20:32:27

+2

@Siddiqui:.NET是封闭源码,PasswordDerivedBytes使用的算法是专有的。您可以使用Reflector来检查实现,或者可能浏览Mono项目,以防已经克隆它。 – 2012-02-11 21:02:29