механизм хеширования действительно безопасен?

Ну, я всегда видел (и следовал) людей, которые говорили, что используют механизм хеширования для хранения паролей в базе данных. Я действительно обеспокоен, это безопасно?

Пойдем с примером.

Позволять'скажем, я хакер, и я получил имя вашей базы данных, идентификатор и пароль. Теперь у меня есть полный доступ к вашей базе данных.

То, что люди говорят, пароли должны быть хэшированы, потому что если кто-то взломает, они видны хакерам.

так что если я запускаю запрос какselect id, password FROM userDetails Я получу данные как ниже

Вариант 1: без хэша
++++++++++++++++++++++++++++
+   id    +    password    +
++++++++++++++++++++++++++++
+  id01    +  password01   +
+  id02    +  password02   +
++++++++++++++++++++++++++++
Вариант 2: с хэш
++++++++++++++++++++++++++++
+   id    +    password    +
++++++++++++++++++++++++++++
+  id01    +  hasValue01   +
+  id02    +  hasValue02   +
++++++++++++++++++++++++++++

Ну, все же я говорю, хеширование небезопасно. Почему я расскажу вам ниже с кодом Java.

PreparedStatement pst = conn.prepareStatement("SELECT id, password FROM userDetails");
ResultSet rs = pst.executeQuery();
String randomPassword = "";
StringBuffer sb;
boolean myPassCheck = true;
while (rs.next()) {
    myPassCheck = true;
    while (myPassCheck) {
        // this will generate random password
        randomPassword = generateRandomPassword();
        MessageDigest md = MessageDigest.getInstance("MD5");
        byte[] array = md.digest(randomPassword.getBytes());
        sb = new StringBuffer();
        for (int i = 0; i < array.length; ++i) {
            sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100).substring(1, 3));
        }
        if (sb.toString().equals(rs.getString(2))) {
            // this is password
            myPassCheck = false;
            System.out.print("id=" + rs.getString(1) + ", password=" + sb.toString());
        }
    }
}

Таким образом, я могу напечатать имя пользователя и пароль. (Я знаю, что мне придется генерировать случайный пароль, пока я не нашел пароль). Однако, таким образом, механизм хеширования пароля также не работает.

Также я полагаю, что в этом мире есть расшифровщик, который преобразует хеш-данные в реальные данные.

Следовательно, я думаю

Безопасен ли механизм хеширования?Редактировать 1

Я говорю не только о MD5. Я выбираю MD5 для примера ТОЛЬКО. Я говорю о любом механизме безопасного пароля

Ответы на вопрос(4)

Ваш ответ на вопрос