当我使用方法"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#)相同的结果?
这是因为无符号/有符号字节?
提前谢谢: - )