Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Encriptacion

Estas en el tema de Encriptacion en el foro de PHP en Foros del Web. Hola! Estoy haciendo una tienda online que posteriormente subire a internet. He hecho un grado superior de Desarrollo de Aplicaciones Multiplataforma, y en PHP nos ...
  #1 (permalink)  
Antiguo 01/06/2014, 17:26
 
Fecha de Ingreso: agosto-2013
Mensajes: 103
Antigüedad: 10 años, 8 meses
Puntos: 1
Encriptacion

Hola! Estoy haciendo una tienda online que posteriormente subire a internet.
He hecho un grado superior de Desarrollo de Aplicaciones Multiplataforma, y en PHP nos enseñaron a usar sha1 para encriptar contraseñas en los registros de usuarios.

Entiendo que sha1 es un estandar y hasta donde me dijeron era relativamente seguro. Ahora bien, a mi lo de relativamente seguro no me termina de convencer y queria saber la opinion que hay por aqui. La tienda online es para una empresa muy pequeña y que no tiene de momento nada de publicidad pues se acaba de crear. Merece la pena que pierda tiempo en aprender otra forma de encriptar las contraseñas o por el contrario es lo suficientemente seguro (para esta empresa que es pequeña) el sha1 y deberia continuar con lo demas?

No es que ande perdido pero he visto algun tutorial de blowfish y aunque no es que tenga dificultad sé que voy a tardar un poco mas, y es tiempo que podria dedicar a mejorar otras cosas de la tienda online. Estaria bien escuchar algun consejo :)

Un saludo!
  #2 (permalink)  
Antiguo 01/06/2014, 17:44
Avatar de Atomycko  
Fecha de Ingreso: diciembre-2005
Ubicación: Zapopan Jal.
Mensajes: 92
Antigüedad: 18 años, 3 meses
Puntos: 12
Respuesta: Encriptacion

pues yo uso crypt, puedes encontrar info aqui:
http://mx1.php.net/manual/es/function.crypt.php

O tambien:
http://mx1.php.net/manual/es/function.password-hash.php

Si esto resolvio tus dudas, da el tema por solucionado por favor .
Saludos!
__________________
PD: Los acentos fueron secuestrados.
  #3 (permalink)  
Antiguo 01/06/2014, 23:00
 
Fecha de Ingreso: agosto-2013
Mensajes: 103
Antigüedad: 10 años, 8 meses
Puntos: 1
Respuesta: Encriptacion

muchas gracias por tu ayuda!

Hace unos meses que no toco nada de PHP (he estado con java) y la verdad es que al leer que lo mas seguro es generar un salt aleatorio eso me ha confundido. ¿Como voy a saber el salt que tiene si es aleatorio a la hora de contrastar la contraseña que me mete el usuario con la que me viene en la base de datos?

Dejo un trozo de como lo estoy haciendo el registro, pero el problema es cuando inserto la contraseña; que no tengo ni idea como lo voy a hacer... si alguien pudiera echarme un cable se lo agradeceria.

Código PHP:
Ver original
  1. <?php
  2. if(isset($_POST) && !empty($_POST)){
  3. $mysqli = new mysqli("localhost", "root", "", "pepitoGrillo");
  4. $mysqli->select_db("pepitoGrillo");
  5. $pass = mysqli_real_escape_string($mysqli,$_POST['passw']);
  6.  
  7. $salt = mcrypt_create_iv(22, MCRYPT_DEV_URANDOM);
  8. $salt = base64_encode($salt);
  9. $salt = str_replace('+', '.', $salt);
  10. $hash = crypt($pass, '$2y$10$'.$salt.'$');
  11.  
  12. $sql = "INSERT INTO administracion (password) VALUES ('".$hash."');";
  13.  
  14. $result = $mysqli->query($sql);
  15. $result = $mysqli->query("select * from usuarios");
  16.  
  17.       while($fila = $result->fetch_assoc()){
  18.          header("Location:./php/indexPrivado.php");
  19.       }
  20. }
  21. ?>
  #4 (permalink)  
Antiguo 02/06/2014, 00:57
Avatar de Atomycko  
Fecha de Ingreso: diciembre-2005
Ubicación: Zapopan Jal.
Mensajes: 92
Antigüedad: 18 años, 3 meses
Puntos: 12
Respuesta: Encriptacion

Bueno, pues no habia visto la funcion mcrypt_create_iv() no la conocia jeje.

Podrias crear el salt usando la primera y ultima letra del nombre de usuario, por ejemplo si es juancho usar "jo":

Código HTML:
<form action="" method="post">
Nombre: <input type="text" name="nombre" />
Contraseña: <input type="password" name="contrasena" />
<button type="button" onclick="this.form.action='registro.php';this.form.submit()">Registrarse</button>
<button type="button" onclick="this.form.action='acceso.php';this.form.submit()">Acceder</button>
</form> 
registro.php
Código PHP:
<?php
$mysqli 
= new mysqli("localhost""root""""pepitoGrillo");
// $mysqli->select_db("pepitoGrillo"); <- ???!
$nombre trim($_POST['nombre']);
$salt $nombre[0] . $nombre[strlen($nombre) - 1];
$contrasena crypt($_POST['contrasena'], $salt);
if(
$mysqli->query("INSERT INTO usuarios (nombre,contrasena) VALUES ('$nombre','$contrasena')")){
    echo 
'Registro OK etc., etc...';
    exit;
}
echo 
'Error';
?>
acceso.php:
Código PHP:
<?php
$mysqli 
= new mysqli("localhost""root""""pepitoGrillo");
// $mysqli->select_db("pepitoGrillo"); <- ???!
$nombre trim($_POST['nombre']);
$salt $nombre[0] . $nombre[strlen($nombre) - 1];

// esta manera no es recomendable pero...
$contrasenaCrypt $mysqli->query("SELECT contrasena FROM usuarios WHERE nombre='$nombre' LIMIT 1")->fetch_assoc()['contrasena'];
// ...niños, no lo hagan en casa ;)

if($contrasenaCrypt && crypt($_POST['contrasena'], $salt) == $contrasenaCrypt){
    echo 
'Login OK etc., etc...';
    exit;
}
echo 
'Error';
?>
Bueno espero te sirva de guia para hacer lo que requieres.

Saludos!
__________________
PD: Los acentos fueron secuestrados.
  #5 (permalink)  
Antiguo 02/06/2014, 04:20
 
Fecha de Ingreso: agosto-2013
Mensajes: 103
Antigüedad: 10 años, 8 meses
Puntos: 1
Respuesta: Encriptacion

jo muchisimas gracias!!! Ahora lo entendi mejor.
  #6 (permalink)  
Antiguo 02/06/2014, 06:11
 
Fecha de Ingreso: agosto-2013
Mensajes: 103
Antigüedad: 10 años, 8 meses
Puntos: 1
Respuesta: Encriptacion

Cita:
Iniciado por Atomycko Ver Mensaje
Código PHP:
Ver original
  1. $salt = $nombre[0] . $nombre[strlen($nombre) - 1];
  2. $contrasena = crypt($_POST['contrasena'], $salt);
Aunque no lo he hecho exactamente asi, para el que le sirva he hecho algo parecido y he puesto esto

Código PHP:
Ver original
  1. $cadena='a7sf6SFS%&();.*/';
  2. $salt = $nombre[0]. $cadena . $nombre[strlen($nombre) - 1];
  3. $contrasena = crypt($_POST['contrasena'], sha1($salt));

En mi opinion parece mas seguro :) y en la vuestra?

Un saludo
  #7 (permalink)  
Antiguo 02/06/2014, 06:34
 
Fecha de Ingreso: diciembre-2012
Mensajes: 128
Antigüedad: 11 años, 4 meses
Puntos: 12
Respuesta: Encriptacion

Me parece que si buscas seguridad tendrias que usar encriptacion de un solo sentido.
__________________
Comparador facturas de luz
  #8 (permalink)  
Antiguo 02/06/2014, 07:08
 
Fecha de Ingreso: agosto-2013
Mensajes: 103
Antigüedad: 10 años, 8 meses
Puntos: 1
Respuesta: Encriptacion

Cita:
Iniciado por phoneval Ver Mensaje
Me parece que si buscas seguridad tendrias que usar encriptacion de un solo sentido.
Igual es una pregunta estupida, pero es que soy bastante nuevo (que me acabo de sacar el titulo). Por que es mas seguro en un solo sentido?

Un saludo y gracias :)
  #9 (permalink)  
Antiguo 02/06/2014, 19:01
 
Fecha de Ingreso: junio-2014
Mensajes: 3
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Encriptacion

yo lo uso de esta forma

Código PHP:
Ver original
  1. //Valores del formulario
  2.     $username = mysql_real_escape_string($_POST['username']);
  3.     $email = mysql_real_escape_string($_POST['email']);
  4.     $password = mysql_real_escape_string($_POST['password']);
  5.    
  6.     //genera un unico y fuerte salt
  7.     $salt_gen = uniqid(mt_rand());
  8.    
  9.     //Combina email, password y el salt juntos
  10.     $combine = $email . $password . $salt_gen;
  11.    
  12.     //md5 hash mas la combinacion
  13.     $newpassword = md5($combine);
  14.    
  15.     //inserta los valores en la base de datos
  16.     $registerquery = mysql_query("INSERT INTO users (usr_name, usr_pass, usr_email,  usr_salt) VALUES ('".$username."', '".$newpassword."', '".$email."', '".$salt_gen."')") or die("MySQL Error: ".mysql_error());
  #10 (permalink)  
Antiguo 10/06/2014, 02:57
 
Fecha de Ingreso: diciembre-2012
Mensajes: 128
Antigüedad: 11 años, 4 meses
Puntos: 12
Respuesta: Encriptacion

Cita:
Iniciado por Mechabits Ver Mensaje
Igual es una pregunta estupida, pero es que soy bastante nuevo (que me acabo de sacar el titulo). Por que es mas seguro en un solo sentido?

Un saludo y gracias :)
Si solo tienes que comparar una cadena como por ejemplo una contraseña con que lo encriptes hacia un mismo sentido te sobra por ejemplo:

Código PHP:
$cadenaencriptada sha1(md5(cadena)); 
con un buen código de encriptacion si tu base de datos cae en manos ajenas no podrán sacar las cadenas y si tu quieres compararlas solo tienes que comparar las cadenas encriptadas y si son iguales le das acceso.

La única pega de esto es que ni tu la sabrás y si alguien la pierde solo podrá cambiarla pero no recuperarla.
__________________
Comparador facturas de luz

Etiquetas: encriptacion, registro, usuarios
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




La zona horaria es GMT -6. Ahora son las 10:11.