Rfc2898DeriveBytes C#结果不一样,相当于Java

时间:2014-10-15 09:51:44

标签: java c# encryption

当我使用方法"Rfc2898DeriveBytes"时,有不同的构造函数。

我使用这两个构造函数,但我没有找到相同的结果:

C#:

Rfc2898DeriveBytes(Byte[], Byte[], Int32)

Rfc2898DeriveBytes(String, Byte[], Int32)

在第一种情况下:

var pwd = Convert.FromBase64String(_pwd);
var salt = Convert.FromBase64String(_salt);
var key1 = Rfc2898DeriveBytes(pwd,salt,25);
byte[] resultKey1 = key1.GetBytes(16);

在第二种情况下:

var salt = Convert.FromBase64String(_salt);
var key2 = Rfc2898DeriveBytes(_pwd,salt,25);    
byte[] resultKey2 = key2.GetBytes(16);

现在在Java中,等价是:

SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
KeySpec spec = new PBEKeySpec(PASSWORD.toCharArray(), byteArraySalt, 25, 128);
SecretKey temp = factory.generateSecret(spec);

使用此Java代码,结果与"resultKey2"(在C#中)相同

那么,我们如何在Java中获得与"resultKey1"(C#)相同的结果?

这是因为无符号/有符号字节?

提前谢谢: - )

0 个答案:

没有答案