Passwords en PHP/MySQL

Winglet

Hola!

En muchos tutoriales que he visto, muchas veces veo que suelen guardar las claves encriptadas con el md5() en la base de datos. Esto creo que tiene el problema de que entonces no se puede recuperar la clave en el caso de que se implemente la tipica función de lost password, ¿esto es cierto? ¿ Realmente es necesario encriptar esa información para una comunidad que intento hacer? (parecida a esta pero de otra temática y en pequeñito (bueno, la web en sí, ahora que la ponga a funcionar es otra cosa... ya veré si me queda bien, por ahora solo trato de aprender :-P ) ).
¿Hasta que punto es mejor (si es que lo es...) hacer un generador de password y que cree una aleatoria para los usuarios en lugar de que éstos creen la suya...? aun implementando una función para luego cambiarla por una que guste mas (y no una de esas que nadie en el mundo es capaz de recordar del tipo dSDfjf39is24 pero que son las mas seguras segun dicen).

Pues eso, a ver ahí. ¿Que opinan?

Un saludo,
Marcos.

Whose

mediante inyeccion SQL pueden sacarte una pass y joderte, si esta en MD5 te evitas eso ;)

BrOkeR

Lo mejor es que la guardes en md5. El recuperar password se puede hacer generando una key (como una cdkey) temporal y que en un script especial mediante esta key el usuario pueda cambiar el password. Anteriormente esta key autogenerada se envia a la direccion de la cuenta del usuario.

AntonRodin

Podrias hacerte un propio sistema casero de encriptacion xD no se si me entiendes...por ejemplo sustituir letras por numeros q el md5 es muy visto iwal hay trucos para pillarlo no tengo ni zorra no lo utilize nunca pero el tuyo propio q inventes tu seria bastante mas dificil de descifrarlo.

Crawler

lo de hacer seguridad "casera" no es mala idea,pq asi te evitas tener la misma q en todas partes.
Por otra parte, el md5,si no estoy equivocado, codifica la informacion usando una ecuacion q no tiene inverso (si digamos q multiplica, no tiene division) asi q no se puede recuperar.
Cuando tu ingresas tu clave en el formulario de entrar, la encripta en md5 y compara si es igual el md5 q el q hay en la base de datos, pero en ningun caso (al menos "conocido") se puede desencriptar esa informacion.

Abreu

Yo lo guardo en md5 para que el usuario sea el unico que sepa su password. Ni tu ni nadie podra verlo jamas.

El problema de recupear password lo he evitado mandando el password sin encriptar a la cuenta de email antes de guardarlo en la base de datos encriptado.

Lo chungo viene cuando el usuario lo olvida o borra el email... yo uso un campo más durante el registro para escribir una frase que pueda ayudar a recordar el password. Despues mediante el tipico formulario de recupear password lo que envio al email es la frase de ayuda.

BrOkeR

#4 el md5 es un algoritmo de encriptacion sin vuelta atras. Es decir, no es descifrable.

LOc0

MD5 sólo es seguro en passwords alfanuméricas a partir de 9 caracteres. Menos de eso es crackeable y no precisamente difícil...

Bueno, al grano. SI alguien pierde la password, se le manda un email (con el que se registró) donde se le da opción a que la cambie por otra ( no se le manda su antigua password)

Salu2 ;)

PD: Dije la cifra sin hacer el cálculo exacto. Mi +2200, por ejemplo, procesa unos 5.500.000 de hashes por segundo. Con 8 caracteres alfanuméricos salen: (10+28)8= 4347792138496 combinaciones.

Eso serían 9 días en el peor de los casos (sin contar dobles positivos...)
||
||
\/

S

Benchmarking: FreeBSD MD5 [32/32]... DONE
Raw: 4919 c/s real, 4998 c/s virtual

Pues en mi 2200+ me salen 18 años computando para una de 8 caracteres, 9 añitos de media.

#4 el md5 es un algoritmo de encriptacion sin vuelta atras. Es decir, no es descifrable.

Es un algoritmo de hash, para que sea considerado cifrado ("encriptación") debería contemplar la vuelta atrás.

#10 No es de cifrado porque hay colisiones, así de simple. Toma 8ff3a524d0f1f153c79b424d1f1a2ffc, es el hash de mi disco duro. Descífralo y cópiate los mp3 que quieras (eso sí, te encontrarás infinidad de secuencias de datos que te darán el mismo resultado, y lo que es peor, tardarás 3 eternidades para cada una xD).

Chulla

#5 te equivocas , aunque llevas razón :)

el md5 utiliza un algorito de nº primos, funciones hash, etc..

es muy rotundo decir es imposible desencriptar yo mas bien diría :

Técnicamente es imposible desencriptar, dicha informacion. Ya que requiere una cantidad inmensa de calculos (trabajando con nº primos) que hacen TECNICAMENTE imposible hayar la solucion :)

Mav

Juas, quien me iba a decir que veria en MV una discusion sobre problemas NP-completos :P

En general se recomienda usar md5(). Cuando un (l)user pierde el password lo que hago es crear uno temporal y obligarle a cambiarlo la siguiente vez que hace login.

O

que es lo del 2200+ ?

AntonRodin

AMD ATLON XP 2200+

PeLoTaSo

Un md5 no es imposible descifrarlo ya que en matemáticas todo lo que se puede hacer en un sentido se puede hacer en otro, la cuestión es el tiempo que se tarda en hacer el inverso, con md5 es mucho más rapido cifrar y comprobar que hacer el inverso, sin ir más lejos MV utiliza md5 y guarda el hash de la pass en una cookie y cuando conectas solicita la cookie comprueba que el hash se corresponde con el que tiene en su BD y ta acceso, aunque yo veo esto algo arriesgado para el usuario porque no todos tienen passwords de mas de 9 cifras y eso hace que la pass pueda ser descifrada.

al

#14 No descifras nada, te limitas a crear palabras a base de carácteres a ver si corresponde con el md5 que ya tienes. Esto puede ser fácil para passwords de >6 carácteres. Más que eso ya te puedes pasar un buen rato..pq para cada carácter hay 256 posibilidades
2566 = BUF! xD

S

#15 No descifras nada simplemente porque no está cifrado.

Cifrado:
Encryption is the process of obscuring information to make it unreadable without special knowledge.
http://en.wikipedia.org/wiki/Encryption

Hash:
A hash function is a function that converts an input from a (typically) large domain into an output in a (typically) smaller range (the hash value, often a subset of the integers).
http://en.wikipedia.org/wiki/Hash_function

Usuarios habituales