M
maduranma
Beta
Programador
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
A ver, nada es imposible de sacar a fuerza bruta, lo que si es imposible es desencriptarlo. Como sabéis MD5 son 32 caracteres formados por letras y/o números. Entonces siempre hay la posibilidad de que se repita uno de los valores, si cuentas que hay 26 letras (que siempre son minúsculas) y 10 números (del 0 al 9) y elevamos 36^32 sabemos que al encriptar 36,3x10^49 contraseñas distintas al menos se repetirá una vez el hash. Con eso quiero decir que sea una contraseña más larga o más corta, siempre habrá la posibilidad de entrar a la cuenta con una contraseña diferente, así que siempre está la posibilidad de la fuerza bruta, y puede que por casualidad coindica con el hash de 'a', y te la saque en un segundo (aun que hay una posibilidad entre 36,3x10^49). Con eso quiero decir que la contraseña nunca es segura uses esta encriptación, uses sha1 o uses la que uses. Así que si lo haces por eso, no, no vale la pena (bajo mi punto de vista), ya que con conseguir una contraseña con cada hash, sobra para entrar en dicha cuenta, y así es como se hacen esas grandiosas bases de datos de hashes, al tener un hash que se repita, se intenta generar otro, y otro... (eso o encriptar también todas las contraseñas posibles con todos los caracteres posibles por orden, que es fácil hacerlo). Por ello, como iba diciendo, no vale la pena.
Lo que si vale la pena es encriptarlas por que si usas esa misma contraseña en otro sitio y usan una encriptación diferente, al menos puede que no sea la misma (y eso si consiguen desencriptarla y no lo hacen a fuerza bruta). Con eso también se pretende evitar que los administradores vean las contraseñas (y si no recuerdo mal, hay una ley que lo exige). Sea como fuere, lo mejor es usar una contraseña diferente en cada sitio, y que sea larga y rara.
Yo usaría sha1, hay menos bases de datos que las desencripten (es un poco menos común). Pero ahora recomiendan usar whirlpool, y la verdad es que lo veo sólido. De todos modos si que recomiendo añadir siempre una 'salt' que es algo que se añade antes, después, en medio (o donde quieras, pero siempre en el mismo sitio) del a contraseña. PHP: hash - Manual <- Ahí más información.
P.D: Si quieres evitar esa posible coincidencia en el md5 (como he explicado antes), lo que se hace es almacenar 2 hashes diferentes en la base de datos, uno con la salt al principio y otro con la salt al final, así si coincidiera la contraseña con una salt, al menos de la otra no coincidiría, y siempre quitas más posibilidades, o incluso almacenar dos hashes, uno de sha1 y otro de md5, o cosas así. Cuantos más, mejor, pero a la vez peor por ser más posible de 'desencriptar' (y lo pongo entre comillas por que no la desencriptas, la buscas en una base de datos y si encuentras una contraseña igual generada por su robotito, te la devuelve).
Suerte 🙂
Lo que si vale la pena es encriptarlas por que si usas esa misma contraseña en otro sitio y usan una encriptación diferente, al menos puede que no sea la misma (y eso si consiguen desencriptarla y no lo hacen a fuerza bruta). Con eso también se pretende evitar que los administradores vean las contraseñas (y si no recuerdo mal, hay una ley que lo exige). Sea como fuere, lo mejor es usar una contraseña diferente en cada sitio, y que sea larga y rara.
Yo usaría sha1, hay menos bases de datos que las desencripten (es un poco menos común). Pero ahora recomiendan usar whirlpool, y la verdad es que lo veo sólido. De todos modos si que recomiendo añadir siempre una 'salt' que es algo que se añade antes, después, en medio (o donde quieras, pero siempre en el mismo sitio) del a contraseña. PHP: hash - Manual <- Ahí más información.
P.D: Si quieres evitar esa posible coincidencia en el md5 (como he explicado antes), lo que se hace es almacenar 2 hashes diferentes en la base de datos, uno con la salt al principio y otro con la salt al final, así si coincidiera la contraseña con una salt, al menos de la otra no coincidiría, y siempre quitas más posibilidades, o incluso almacenar dos hashes, uno de sha1 y otro de md5, o cosas así. Cuantos más, mejor, pero a la vez peor por ser más posible de 'desencriptar' (y lo pongo entre comillas por que no la desencriptas, la buscas en una base de datos y si encuentras una contraseña igual generada por su robotito, te la devuelve).
Suerte 🙂