¿Es realmente seguro el mecanismo de hash?

Bueno, siempre he visto (y siguiendo) a personas que dicen usar el mecanismo de hash para almacenar contraseñas en la base de datos. Estoy realmente preocupado, ¿es seguro?

Vayamos con el ejemplo.

Digamos que soy un pirata informático y obtuve el nombre, id y contraseña de su base de datos. Ahora tengo acceso COMPLETO a su base de datos.

Lo que la gente dice que las contraseñas deberían estar ocultas porque si alguien las piratea, son visibles para los hackers.

así que si ejecuto consulta comoselect id, password FROM userDetails Obtendré datos como abajo

Opción 1: Sin hash
++++++++++++++++++++++++++++
+   id    +    password    +
++++++++++++++++++++++++++++
+  id01    +  password01   +
+  id02    +  password02   +
++++++++++++++++++++++++++++
Opción 2: Con Hash
++++++++++++++++++++++++++++
+   id    +    password    +
++++++++++++++++++++++++++++
+  id01    +  hasValue01   +
+  id02    +  hasValue02   +
++++++++++++++++++++++++++++

Bueno, aún digo, el hash es inseguro. Por eso os contaré a continuación con código 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());
        }
    }
}

De esta manera, puedo imprimir el nombre de usuario y la contraseña. (Sé que tendré que generar una contraseña aleatoria hasta que no la haya encontrado). Sin embargo, de esta manera, el mecanismo de contraseña de hashing también falla.

También creo que hay un descifrador presente en este mundo que convertirá los datos hash a datos reales.

Por eso estoy pensando

¿Es seguro el mecanismo de hash?Editar 1

No estoy hablando de MD5 solamente. Elijo MD5 por ejemplo SOLO propósito. Estoy hablando de cualquier mecanismo para contraseña segura

Respuestas a la pregunta(4)

Su respuesta a la pregunta