Используя только классы PBEKeySpec
и SecretFactory
и зная salt
и coded
, есть ли способ расшифровать coded
для восстановления password
?
public static byte[] encodePassword(char[] password, byte[] salt) {
PBEKeySpec spec = new PBEKeySpec(password, salt, ITERATIONS, KEY_LENGTH);
Arrays.fill(password, Character.MIN_VALUE);
try {
SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
byte[] coded = skf.generateSecret(spec).getEncoded();
return coded;
} catch (NoSuchAlgorithmException | InvalidKeySpecException e) {
throw new AssertionError("Error while hashing a password: " + e.getMessage(), e);
} finally {
spec.clearPassword();
}
}
Нет, невозможно восстановить пароль с помощью алгоритма хеширования паролей, такого как PBKDF2. Тот факт, что он необратим, является одной из основных причин использования такого алгоритма.
вы «могли бы» взломать пароль, если бы знали ключ и соль, но это «заняло бы» много времени.
одностороннее шифрование является причиной того, что вы не можете «восстановить» свой пароль на многих сайтах, а только сбросить его, и это рекомендуемый метод для хранения паролей и сравнения закодированных строк во время входа в систему.