Título: ¿Cómo es posible que te identifique? Publicado por: Zarlok en 22 Agosto 2014, 19:04 pm Hola, he estado buscando por Internet una forma de poder estar tranquilo al cifrar las contraseñas en la BD para que nadie las pueda descifrar.
En la mayoría de sitios recomiendan que en la BD haya un campo para el salt y otra para la contraseña que se la habrá aplicado un sha256 u otro. Pero en otro lugar han afirmado que es muy inseguro y que lo mejor es usar bcrypt, en el que por lo que veo no hace falta que haya ningún campo salt en la bd y funciona de la siguiente manera: Cómo podéis ver en la imagen se entiende bien, excepto que no logro entender a la hora de identificarte: if (crypt('password_introducida',$passwordEnBD) == $passwordEnBD) CORRECTO ¿Cómo puede ser? En principio siempre que te registres ni que sea con la misma pass, cómo el salt cada vez es distinto, $passwordEnBD será diferente. ¿Pero claro, si no guardas el salt en la bd, cómo puedes identificarte? Lo he probado tal cómo la imagen y funciona perfectamente, pero no entiendo cómo lo identifica. ¿Alguien que lo sepa, me lo podría explicar? Gracias. (http://oi62.tinypic.com/24nivy9.jpg) Título: Re: ¿Cómo es posible que te identifique? Publicado por: #!drvy en 22 Agosto 2014, 21:42 pm El código que expones no puede devolver true, te falla algo o no incluyes todos los detalles.
Código
Resultado Código
Sin embargo, si, se hace un mal uso... y dependiendo de la versión de PHP, igual puede llegar a coincidir. En este caso se hace mal uso porque suministras como salt el código generado previamente y usas ese mismo código para hacer la comprobación.. Siempre haz de dar un uso correcto de crypt(). Ademas, debes asegurarte de que el salt es seguro y aleatorio. http://php.net/manual/en/function.crypt.php Ejemplo de blowfish. Código
Citar Pero en otro lugar han afirmado que es muy inseguro y que lo mejor es usar bcrypt El uso de algoritmos tipo bcrypt se considera "mas seguro", porque a diferencia de algoritmos como md5,sha1,sha512 etc.. blowfish esta hecho para tardar. Tiene lo que se llama factor de dificultad. Para que veas la diferencia BLOWFISH 2Y vs SHA512 (los dos con el mismo salt) Código Resultado Código
La idea es que el algoritmo tarda mas en generar la llave y por tanto aumenta significativamente el tiempo que tomaría realizar un ataque de fuerza bruta. No importa cual grande es SHA512 o SHA256.. si están hechos para velocidad (fueron pensados para comprobar la consistencia de archivos, no para hashear contraseñas xD), no se les considera aptos para este trabajo. Como nota, dejare que crypt() para SHA256 y SHA512 soporta el parámetro rounds dentro del salt. El valor por defecto es de 5000 (con el que fue hecho el ejemplo).. haría falta ponerlo en mas de 100.000 para que alcance el factor de dificultad 12 de BLOWFISH xD. Código PD: Temas sobre PHP van al subforo de PHP (https://foro.elhacker.net/php-b68.0/). PD2: Siempre usa === para comparar strings. Saludos Título: Re: ¿Cómo es posible que te identifique? Publicado por: Zarlok en 23 Agosto 2014, 00:21 am Hola,
Uso la versión PHP Version 5.4.27. También he probado el código y a mi si me devuelve true. Ahora lo pongo más detallado: Código
Resultado: string(60) "$2y$07$omuYVZ2//iscACoKw6.pNemj7uOD4.NVDI9et/fl7MXPn3g66MHNi" string(60) "$2y$07$omuYVZ2//iscACoKw6.pNemj7uOD4.NVDI9et/fl7MXPn3g66MHNi" OK Título: Re: ¿Cómo es posible que te identifique? Publicado por: #!drvy en 23 Agosto 2014, 00:36 am Hola,
Bueno al parecer, eso es una funcionalidad de crypt() para comparar hashes con diferentes algoritmos. Si te fijas en la pagina que te pase, http://php.net/manual/en/function.crypt.php En el 1er ejemplo: Código
Es decir, se usa para evitar problemas con diferentes algoritmos de hasheo. Por lo cual, se deduce que es un "extra" dentro del build. Saludos |