Какой API и алгоритм следует использовать для шифрования и расшифровки пароля с помощью java



В настоящее время я создаю приложение с использованием Java, я гуглил шифрование паролей с помощью java, но результаты настолько огромны, что я чувствовал себя подавленным. Как я буду шифровать и расшифровывать пароль с помощью Java? А как лучше всего шифровать и расшифровывать пароли? Я предполагаю, что MD5-это не путь, так как это односторонний хэш. Я использую struts2 в качестве фреймворка, мне было интересно, обеспечивают ли они шифрование паролей

743   6  

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;
}

Ну, как я знаю, мы следуем некоторому алгоритму для защиты пароля.

  1. MD5 -
  2. PBKDF2 -
  3. ша -
  4. 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

    Ничего не найдено.