M
maduranma
Beta
Programador
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Como ya dije las contraseñas se pueden repetir, y a lo mejor: 'sdfdhferwioh4eio' encriptado 500 veces coincide con el hash de 'a' una sola vez (es un ejemplo, no se con cual coincide 'a'), pero te digo que es inútil, la única forma es usar dos encriptaciones diferentes y guardarlas y comprobar si ambas coinciden, eso es lo más seguro que hay.Hay frameworks (symfony) que usan md5 en bucle hasta 500 veces para encriptar una contraseña. Te aseguro que ningún diccionario va a tener las claves generadas...
Como ya dije las contraseñas se pueden repetir, y a lo mejor: 'sdfdhferwioh4eio' encriptado 500 veces coincide con el hash de 'a' una sola vez (es un ejemplo, no se con cual coincide 'a'), pero te digo que es inútil, la única forma es usar dos encriptaciones diferentes y guardarlas y comprobar si ambas coinciden, eso es lo más seguro que hay.
Como ya dije las contraseñas se pueden repetir, y a lo mejor: 'sdfdhferwioh4eio' encriptado 500 veces coincide con el hash de 'a' una sola vez (es un ejemplo, no se con cual coincide 'a'), pero te digo que es inútil, la única forma es usar dos encriptaciones diferentes y guardarlas y comprobar si ambas coinciden, eso es lo más seguro que hay.
Lo que es seguro es que tanto si la contraseña es 8183849;#-38€+83€+27€-€82-"83!"+3(292738€+"8€(9291829 como si es jsjexkue y hay doble encriptación y intentas 32^x (no lo recuerdo) intentos la consigues seguro. Por ello estoy haciendo una librería de hashes md5 y sha1, cuando la de md5 llegue a esa cantidad no habrá hash que se resista:36 elevado a 20 son 11882217367861096949190085312512 (Ya da cualquier cosa elevándolo a más)
En teoría se repetiría, pero solo en teoría, para encontrar dicha coincidencia sería más fácil hacerle fuerza bruta a la posible contraseña que al hash...
Cuando consigas desencriptar MD5 voy y te beso los pies. Y cuando digo desencriptar me refiero a desencriptar, no buscar en bases de datos ni a fuerza bruta.Usa MD5 y el resultado mezclalo con otra cadena que generes al azar usando un script propio, luego a esa cadena final, vuelve a meterle md5 y vuelve a generar otra cadena y vuelve a unir todo, y para desencriptar la clave, solo haces el proceso a la inversa xd
Cuando consigas desencriptar MD5 voy y te beso los pies. Y cuando digo desencriptar me refiero a desencriptar, no buscar en bases de datos ni a fuerza bruta.
La forma más segura que se me ocurre es insertar varias contraseñas, en la columna poner por ejemplo una de sha1, una de md5 y otra de lo que quieras, así bajas las posibilidades de que se repita el hash a practicamente nulas.
Me explico:
Si por ejemplo 'a' en MD5 es ifdjhgvbi0he3490gh5g45379g3458tg9
y 'gheufgreuifgg389rg480tg4380tg8403gt0843gt45803gf345eg54yh465t64t' en MD5 es ifdjhgvbi0he3490gh5g45379g3458tg9 (lo mismo que 'a')
eso sería que el hash coincide (y efectivamente y como ya expliqué en otra respuesta de este mismo post, es completamente posible que eso pase, y también es posible que pase con una contraseña más fácil que la tuya).
En SHA1 puede pasar lo mismo, pero la encriptación es diferente, vamos, que lo que se repite en MD5 no tiene por que repetirse (digo no tiene por que por que hay un 0,0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001% de que pase, me he inventado los ceros pero por ahí andará la cosa).
Con eso lo que quiero decir es que si insertas las dos contraseñas por separado, hay muchas menos posibilidades de que coincida una repetición, y de esa forma si tu contraseña es super avanzada les costará mucho sacarla a fuerza bruta.
Lo que no sirve es sha1(md5()) por que si se repite el md5, el sha1 también se repetirá por lo que sería lo mismo que solo usar md5().
De todos modos, si que es cierto que al menos la contraseña quedará más oculta si por ejemplo le añades una larga sal, así si lo usan en otra web, al menos si han acertado una repetición por fuerza bruta en vez de la original, no tendrán peligro.
Es que no lo habías explicado así (o no me lo ha parecido), pensaba que pretendias desencriptar el MD5 a posteriori xDLo que yo dije es 100% posible, si haces un script encriptador para encriptar la clave y guardarla a la base de datos y otro que haría lo mismo para encriptar la clave recibida al loguearse, por ejemplo:
el usuario se registra y escribe una clave al darle guardar, el script transforma la clave a md5, luego la une a una cadena generada por otro script, luego todo eso lo transforma a md5 y lo une a otra cadena y lo guarda en la BD.
Ahora cuando el usuario quiera loguearse, simplemente habría que coger la clave y hacer el mismo proceso de arriba, si la clave es la correcta, el resultado seria el mismo que el de la BD y ahí solo se haría una comparación y si son iguales, pues se da acceso al sistema.
Haciéndolo de esta forma si alguien tiene acceso a la BD y a las contraseñas, no podrían descifrarlas nunca, porque serian una mezcla de MD5 mas una cadena generada por un script propio, el cual no conocen y para conocerlo tendrían que tener acceso a todos los archivos del sistema y estudiar el script que genera la cadena.
A eso me refería con encriptar y desencriptar, aunque en realidad solo encriptas dos veces y comparas.
Utilizamos cookies y tecnologías similares para los siguientes fines:
¿Aceptas las cookies y estas tecnologías?
Utilizamos cookies y tecnologías similares para los siguientes fines:
¿Aceptas las cookies y estas tecnologías?