Какой API и алгоритм следует использовать для шифрования и расшифровки пароля с помощью java
В настоящее время я создаю приложение с использованием Java, я гуглил шифрование паролей с помощью java, но результаты настолько огромны, что я чувствовал себя подавленным. Как я буду шифровать и расшифровывать пароль с помощью Java? А как лучше всего шифровать и расшифровывать пароли? Я предполагаю, что MD5-это не путь, так как это односторонний хэш. Я использую struts2 в качестве фреймворка, мне было интересно, обеспечивают ли они шифрование паролей
6 ответов:
Обновлено :
Попробуйте JBCrypt:
String password = "MyPassword123"; String hashed = BCrypt.hashpw(password, BCrypt.gensalt(12)); System.out.println(hashed); // $2a$12$QBx3/kI1SAfwBDFOJK1xNOXK8R2yC7vt2yeIYusaqOisYbxTNFiMyЗагрузитеjBCrypt-0.3 отсюда , проверьте файл README для получения более подробной информации.
Также я не рекомендую использовать MD5, потому что он уже сломан. Вместо этого вы можете использовать SHA512 это безопасный метод хэширования, вы можете использовать MessageDigest . Ниже приведен код, который я использую в одном из моих проектов, который отлично работает
public String encode(String password, String saltKey) throws NoSuchAlgorithmException, IOException { String encodedPassword = null; byte[] salt = base64ToByte(saltKey); MessageDigest digest = MessageDigest.getInstance("SHA-512"); digest.reset(); digest.update(salt); byte[] btPass = digest.digest(password.getBytes("UTF-8")); for (int i = 0; i < ITERATION_COUNT; i++) { digest.reset(); btPass = digest.digest(btPass); } encodedPassword = byteToBase64(btPass); return encodedPassword; } private byte[] base64ToByte(String str) throws IOException { BASE64Decoder decoder = new BASE64Decoder(); byte[] returnbyteArray = decoder.decodeBuffer(str); if (log.isDebugEnabled()) { log.debug("base64ToByte(String) - end"); } return returnbyteArray; }
Ну, как я знаю, мы следуем некоторому алгоритму для защиты пароля.
- MD5 -
- PBKDF2 -
- ша -
- BCrypt и SCrypt -
Среди этих BCrypt и SCrypt являются более безопасным способом защиты паролем.
Есть довольно хороший проект, посвященный решению этой проблемы в Java. По сути, он предоставляет два способа шифрования паролей пользователей: - MD5
- SHA1Взгляните на ссылку: jasypt
Для меня я вижу, что MD5-это лучший способ, и вам не нужно расшифровывать пароль, если пользователь забыл свой пароль, вы можете дать ему способ сгенерировать новый, и для входа в систему вы можете сравнить только хэш, существующий в базе данных, и тот, который был введен пользователем
Всегда используйте один из способов хэш-алгоритма.
Я бы сказал, Идите с хешированием MD5. При сохранении пароля в БД используйте хэширование MD5. Таким образом, если у вас есть пароль в виде pass, после хэширования он будет сохранен как asjasdfklasdjf789asdfalsdfashdflasdf (32 символа).
Как вы уже сказали, вы также хотите расшифровать пароль. я бы сказал Не делай этого. При проверке пароля в БД, что вы можете сделать, это хэшируйте пароль и сравните эту строку с тем, что у вас есть в базе данных.
if (DoHashMD5(myPass).equals(rs.getString(2))) { System.out.print("You are registered user!!!"); } else { System.out.print("Invalid user!!!"); }Здесь
rs.getString(2)будет вашим параметром запроса.
Comments