Foros del Web » Programando para Internet » PHP »

Cifrar contraseñas

Estas en el tema de Cifrar contraseñas en el foro de PHP en Foros del Web. HOla, estoy haciendo el proyecto final de carrera, un portal web, y a la hora de registrar a los usuarios, no sé cómo cifrar las ...
  #1 (permalink)  
Antiguo 23/07/2008, 05:57
Avatar de scout_vlc  
Fecha de Ingreso: julio-2007
Ubicación: Valencia
Mensajes: 141
Antigüedad: 16 años, 9 meses
Puntos: 0
Cifrar contraseñas

HOla,
estoy haciendo el proyecto final de carrera, un portal web, y a la hora de registrar a los usuarios, no sé cómo cifrar las contraseñas.
He visto esto que pone al princpio de este hilo:

Código PHP:
Imports System.Web.Security  'Para WebForms
Imports System.Security  '
Para WinForms

.....

Dim pass As String Me.txtPass.Text
Me
.lblSHA1.Text FormsAuthentication.HashPasswordForStoringInConfigFile(pass"sha1")
Me.lblMD5.Text FormsAuthentication.HashPasswordForStoringInConfigFile(pass"md5"
Lo estoy haciendo con PHP+MySQL, con plantillas smarty, yo tengo esto:

Código PHP:
        $pass stripslashes($_POST["password"]);
        
$pass strip_tags($pass);
        
$smarty->assign('pass'$pass);
                                   ......
//compruebo que no existe..etc y lo ingreso en la BD

    
mysql_query("INSERT INTO usuarios (login,nombre, apellidos, email, password, direccion, conexiones, ganador) values ('$login', '$nombre','$apellidos','$email','$pass', '$direccion',0,0) "$link); 
Quisiera saber cómo pongo lo que habéis dicho para cifrar la password, algo como...
Código PHP:
Imports System.Web.Security;
            
            
Dim pass As String Me.txtPass.Text
            Me
.lblSHA1.Text FormsAuthentication.HashPasswordForStoringInConfigFile(pass"sha1");
            
Me.lblMD5.Text FormsAuthentication.HashPasswordForStoringInConfigFile(pass"md5"); 
cambio txtPass por $pass, termino con ; las sentencias? cómo hago para que guarde en la BD la pasword cifrada? tengo que mofidicar lo que habéis escrito al principio y adecuarlo a mis variables, no???
Perdonad por tanta duda
muchas gracias

salu2
àlex
  #2 (permalink)  
Antiguo 23/07/2008, 07:41
Avatar de ACX_POISON  
Fecha de Ingreso: abril-2008
Ubicación: Talca-Chile
Mensajes: 750
Antigüedad: 16 años
Puntos: 7
Respuesta: Cifrar contraseñas

Sugerencia puedes utilizar md5 0 sh-1 para cifrar el pass, y luego guardarlas en la BBDD

espero te sirva...
  #3 (permalink)  
Antiguo 23/07/2008, 08:33
Avatar de chitoso  
Fecha de Ingreso: mayo-2008
Ubicación: Montevideo, Uruguay
Mensajes: 205
Antigüedad: 15 años, 11 meses
Puntos: 5
Respuesta: Cifrar contraseñas

Tan simple como:

Código PHP:
$password 'UsU4ri0';

$pass_encriptado md5($password); 
Para hacerlo aun mas seguro, ya que es un proyecto final y de porte mediano, puedes utilizar una tecnica que utilizan algunos sistemas, Se llama 'Salting' en ingles.
Y consiste en agregar un 'salt', una cadena de texto antes de calcular el hash a cada string. Sirve para evitar ataques de diccionario o fuerza bruta.

Algo asi, basicamente:
Código PHP:
$salt '&QWERTYYTREWQ&';
$pass_encriptado md5($salt $password); 
Saludos
  #4 (permalink)  
Antiguo 24/07/2008, 12:26
Avatar de scout_vlc  
Fecha de Ingreso: julio-2007
Ubicación: Valencia
Mensajes: 141
Antigüedad: 16 años, 9 meses
Puntos: 0
Respuesta: Cifrar contraseñas

Muchas gracias!
Funciona correctamente....ahora perdona mi ignorancia en este campo...
Veo que en la base de datos, se me guarda u string de letras (la pass cifrada)
cómo hago para cuando se loguean, confirmar que la password es correcta?

Muchas gracias :)
  #5 (permalink)  
Antiguo 24/07/2008, 12:42
Avatar de alonsoandres  
Fecha de Ingreso: enero-2004
Ubicación: Matamoros, Tamaulipas
Mensajes: 305
Antigüedad: 20 años, 3 meses
Puntos: 3
Respuesta: Cifrar contraseñas

hola scout_vlc, para eso, tendrias que decifrar el password de la base de datos y despues compararla con la insertada en el formulario.
  #6 (permalink)  
Antiguo 24/07/2008, 12:43
Avatar de scout_vlc  
Fecha de Ingreso: julio-2007
Ubicación: Valencia
Mensajes: 141
Antigüedad: 16 años, 9 meses
Puntos: 0
Respuesta: Cifrar contraseñas

y cómo la descifro?? es lo que quiero saber...como lo pongo?
  #7 (permalink)  
Antiguo 24/07/2008, 13:00
Avatar de alonsoandres  
Fecha de Ingreso: enero-2004
Ubicación: Matamoros, Tamaulipas
Mensajes: 305
Antigüedad: 20 años, 3 meses
Puntos: 3
Respuesta: Cifrar contraseñas

mira, yo lo haria de esta manera.
Obtendria el password insertado del formulario de login. Ese mismo password lo cifraria denuevo usando lo que menciona chitoso y despues lo comparo el password del usuario en la base de datos. Deberia de funcionar dado a que si el password es correcto, generaria el mismo hash que se encuentra en la base de datos.
  #8 (permalink)  
Antiguo 24/07/2008, 13:09
Avatar de chitoso  
Fecha de Ingreso: mayo-2008
Ubicación: Montevideo, Uruguay
Mensajes: 205
Antigüedad: 15 años, 11 meses
Puntos: 5
Respuesta: Cifrar contraseñas

Cita:
Iniciado por alonsoandres Ver Mensaje
hola scout_vlc, para eso, tendrias que decifrar el password de la base de datos y despues compararla con la insertada en el formulario.
Cuidado, esto es incorrecto. Lo que estamos haciendo con un HASH es cifrar la información pero solo "hacia un lado", es decir, no se puede DEcodificar (facilmente, idealmente).

La manera de proceder, para autentificar la contraseña, como bien dice en el ultimo post, es obtener el pass cifrado, cifrar el que provee el usuario y comprarlos. Es una practica bastante basica, puedes encontrar mas informacion si buscas un poco en el foro.
  #9 (permalink)  
Antiguo 24/07/2008, 13:26
Avatar de alonsoandres  
Fecha de Ingreso: enero-2004
Ubicación: Matamoros, Tamaulipas
Mensajes: 305
Antigüedad: 20 años, 3 meses
Puntos: 3
Respuesta: Cifrar contraseñas

Cita:
Iniciado por chitoso Ver Mensaje
Cuidado, esto es incorrecto. Lo que estamos haciendo con un HASH es cifrar la información pero solo "hacia un lado", es decir, no se puede DEcodificar (facilmente, idealmente).

La manera de proceder, para autentificar la contraseña, como bien dice en el ultimo post, es obtener el pass cifrado, cifrar el que provee el usuario y comprarlos. Es una practica bastante basica, puedes encontrar mas informacion si buscas un poco en el foro.
Ha perdon, se me fue jeje gracias por aclarar eso, jeje.
  #10 (permalink)  
Antiguo 28/07/2008, 05:43
Avatar de scout_vlc  
Fecha de Ingreso: julio-2007
Ubicación: Valencia
Mensajes: 141
Antigüedad: 16 años, 9 meses
Puntos: 0
Respuesta: Cifrar contraseñas

Hola!
Ya me funciona correcto todo lo de registrar usuarios que so comenté, pero algo tan sencillo (aparentemente) como autenticar, no me va...
Si obvio la codificación, si funciona, pero si hago esto:
Código PHP:
                    $pass $_POST[password];
        
$pass stripslashes($_POST[password]);
        
$pass strip_tags($pass);
        echo 
"-----------------\n";
        echo (
$pass);
        echo 
"-----------------\n";
        
$salt '&QWERTYYTREWQ&'
        
$pass_encriptado md5($salt $pass); 
        echo 
"-----------------\n";
        echo (
$pass_encriptado);
        echo 
"-----------------\n";

    
$usuarios=mysql_query("SELECT * FROM usuarios WHERE login='$_POST[login]' AND password='$pass_encriptado' "$link);

    if(
$user_ok mysql_fetch_array($usuarios)) //si existe comenzamos con la sesion, si no, al index
        
{
    ...

no funciona, me da error, probando con echo, me aparece que no encuentra ningún registro en la BD.
Me aparece bien por pantalla:

----------------- 8salaplu----------------- ----------------- f059508b7c297db70b1fcf557fdc23de-----------------


Gracias!
  #11 (permalink)  
Antiguo 28/07/2008, 06:09
Avatar de desendoll  
Fecha de Ingreso: mayo-2008
Mensajes: 340
Antigüedad: 15 años, 11 meses
Puntos: 3
Respuesta: Cifrar contraseñas

mysql_fetch_array($usuarios) debe devolverte un array.

Deberías ponerte en la posición del pass

$array= mysql_fetch_array($usuarios);
$array['password']
__________________
Francesc Jimenez
  #12 (permalink)  
Antiguo 28/07/2008, 06:53
Avatar de chitoso  
Fecha de Ingreso: mayo-2008
Ubicación: Montevideo, Uruguay
Mensajes: 205
Antigüedad: 15 años, 11 meses
Puntos: 5
Respuesta: Cifrar contraseñas

Deberías primero obtener el usuario que esta intentando acceder. LUEGO, recien ver si coincide su pass.
No se donde esta tu error, pero autenticar usuarios es una tarea bastante sencilla, trqata de leer un poco mas en el foro antes de tirarte de cabeza. Hay mucha información.
  #13 (permalink)  
Antiguo 29/07/2008, 05:33
Avatar de scout_vlc  
Fecha de Ingreso: julio-2007
Ubicación: Valencia
Mensajes: 141
Antigüedad: 16 años, 9 meses
Puntos: 0
Respuesta: Cifrar contraseñas

Hola,
tanto mirar, y lo que no tenía bien, es en al estructura de la tabla,e l campo password lo tenia como un string de 15, porque empecé sin cifrarlo, al cifrarlo ocupa unos 32 caracteres, pero no lo cambié, entonces se guardaban los 15 primeros, y al autenticar nunca correspondía jeje.
Ya está cambiado, y me ocurre lo siguiente: la sentencia SQL la compruebo con un echo y es correcta, la copio y pego en phpMyAdmin y me devuelve el usuario correcto, pero la ejecuto en la web y me da este error:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\wamp\www\plantillas\autenticar.php on line 17

Mi código es:

Código PHP:
    $usuarios"SELECT * FROM usuarios WHERE login='" $_POST['login'] . "' and password='$pass_encriptado'";  
    echo (
$usuarios);
    if(
$user_ok mysql_fetch_array($usuarios)) //si existe comenzamos con la sesion, si no, al index -- esta es la linea 17
    
{
..... 
  #14 (permalink)  
Antiguo 29/07/2008, 06:31
Avatar de chitoso  
Fecha de Ingreso: mayo-2008
Ubicación: Montevideo, Uruguay
Mensajes: 205
Antigüedad: 15 años, 11 meses
Puntos: 5
Respuesta: Cifrar contraseñas

Mira mysql_fetch_array
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 2 personas




La zona horaria es GMT -6. Ahora son las 08:31.