Rfc2898DeriveBytes C#结果不同,等价于Java
当我使用方法“Rfc2898DeriveBytes”时,有不同的构造函数 我使用了这两个构造函数,但没有找到相同的结果: C#: 及 在第一种情况下:Rfc2898DeriveBytes C#结果不同,等价于Java,java,c#,encryption,Java,C#,Encryption,当我使用方法“Rfc2898DeriveBytes”时,有不同的构造函数 我使用了这两个构造函数,但没有找到相同的结果: C#: 及 在第一种情况下: var pwd = Convert.FromBase64String(_pwd); var salt = Convert.FromBase64String(_salt); var key1 = Rfc2898DeriveBytes(pwd,salt,25); byte[] resultKey1 = key1.GetBytes(16); 在第二种
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#)相同的结果呢
这是因为无符号/有符号字节吗
提前感谢:-)在第一种情况下,
\u pwd
实际上是Base64编码的吗?你能给出一个不起作用的\u pwd
和密码的例子吗?例如var salt = Convert.FromBase64String(_salt);
var key2 = Rfc2898DeriveBytes(_pwd,salt,25);
byte[] resultKey2 = key2.GetBytes(16);
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
KeySpec spec = new PBEKeySpec(PASSWORD.toCharArray(), byteArraySalt, 25, 128);
SecretKey temp = factory.generateSecret(spec);