Мне нужно хэшировать пароли для хранения в базе данных. Как я могу это сделать на Java?
Я надеялся взять обычный текстовый пароль, добавить случайную соль, затем сохранить соль и хэшированный пароль в базе данных.
Затем, когда пользователь хотел войти в систему, я мог бы взять его отправленный пароль, добавить случайную соль из информации об их учетной записи, хэшировать его и посмотреть, соответствует ли он сохраненному хэшу пароля с информацией об их учетной записи.
Переведено автоматически
Ответ 1
На самом деле вы можете использовать для этого средство, встроенное в среду выполнения Java. SunJCE в Java 6 поддерживает PBKDF2, который является хорошим алгоритмом для хэширования паролей.
/** * Hash passwords for storage, and test passwords against password tokens. * * Instances of this class can be used concurrently by multiple threads. * * @author erickson * @see <a href="http://javalang.ru/a/2861125/3474">StackOverflow</a> */ publicfinalclassPasswordAuthentication {
/** * Each token produced by this class uses this identifier as a prefix. */ publicstaticfinalStringID="$31$";
/** * The minimum recommended cost, used by default */ publicstaticfinalintDEFAULT_COST=16;
/** * Hash a password in an immutable {@code String}. * * <p>Passwords should be stored in a {@code char[]} so that it can be filled * with zeros after use instead of lingering on the heap and elsewhere. * * @deprecated Use {@link #hash(char[])} instead */ @Deprecated public String hash(String password) { return hash(password.toCharArray()); }
/** * Authenticate with a password in an immutable {@code String} and a stored * password token. * * @deprecated Use {@link #authenticate(char[],String)} instead. * @see #hash(String) */ @Deprecated publicbooleanauthenticate(String password, String token) { return authenticate(password.toCharArray(), token); }
}
Ответ 2
BCrypt - очень хорошая библиотека, и у нее есть Java-порт.
Вы можете вычислять хэши с помощью MessageDigest, но это неправильно с точки зрения безопасности. Хэши не следует использовать для хранения паролей, поскольку их легко взломать.
Вам следует использовать другой алгоритм, такой как bcrypt, PBKDF2 и scrypt, для хранения ваших паролей. Смотрите здесь.