Хорошо, таким образом у меня есть этот метод хеширования:Java шифрование равно не работает
public static String getEncodedHash(String password, String salt) throws UnsupportedEncodingException {
// Returns only the last part of whole encoded password
PKCS5S2ParametersGenerator gen = new PKCS5S2ParametersGenerator(new SHA256Digest());
gen.init(password.getBytes(), salt.getBytes(), DEFAULT_ITERATIONS);
byte[] dk = ((KeyParameter) gen.generateDerivedParameters(256)).getKey();
return Base64.toBase64String(dk);
}
Это хэширует прекрасно, насколько я могу судить, и когда она возвращает строку, я сравнить его в строку у меня есть, и они выглядят идентичный, но метод .equals
говорит, что нет. Кто-нибудь есть какие-либо идеи вызывают я буквально все из
Это весь LoginHelper
класс:
import java.io.UnsupportedEncodingException;
import org.spongycastle.crypto.digests.SHA256Digest;
import org.spongycastle.crypto.generators.PKCS5S2ParametersGenerator;
import org.spongycastle.crypto.params.KeyParameter;
import org.spongycastle.util.encoders.Base64;
public class LoginHelper {
public static final Integer DEFAULT_ITERATIONS = 20000;
public static boolean passwordCorrect(String enteredPassword, String storedPassword) throws UnsupportedEncodingException {
String[] parts = storedPassword.split("\\$");
String salt = parts[2];
String storedHash = parts[3];
String calculatedHash = getEncodedHash(enteredPassword, salt);
System.out.println(storedHash);
System.out.println(calculatedHash);
System.out.println(storedHash.length());
System.out.println(calculatedHash.length());
return storedPassword.equals(calculatedHash);
}
public static String getEncodedHash(String password, String salt) throws UnsupportedEncodingException {
// Returns only the last part of whole encoded password
PKCS5S2ParametersGenerator gen = new PKCS5S2ParametersGenerator(new SHA256Digest());
gen.init(password.getBytes(), salt.getBytes(), DEFAULT_ITERATIONS);
byte[] dk = ((KeyParameter) gen.generateDerivedParameters(256)).getKey();
return Base64.toBase64String(dk);
}
}
я вызываю с:
System.out.println(LoginHelper.passwordCorrect("password","pbkdf2_sha256$20000$wlW7Po1nm1DW$nt9LYWbxwvHIXmyBGUQG7NyPDkrt/2fivN3ws//HzLnks="));
Они СМОТРЯТСЯ одинаково, и они идентичны, это две разные вещи. попробуйте использовать WINMerge для сравнения строк. –
можете ли вы опубликовать сравнительную часть, а также какой-то ввод, который вы пробовали? – Karthik
Запишите длину строки и числовое значение каждого символа. На одном из них может быть пространство или подобное. –