Foros del Web » Programando para Internet » PHP »

problema con la contraseña encriptada

Estas en el tema de problema con la contraseña encriptada en el foro de PHP en Foros del Web. Hola, tengo unas dudas sobre la encriptación de la contraseña. He creado un formulario y lo envía a la bd cuando envío los datos me ...
  #1 (permalink)  
Antiguo 06/10/2011, 08:53
 
Fecha de Ingreso: abril-2010
Mensajes: 116
Antigüedad: 14 años, 7 meses
Puntos: 3
problema con la contraseña encriptada

Hola, tengo unas dudas sobre la encriptación de la contraseña.

He creado un formulario y lo envía a la bd cuando envío los datos me gustaría encriptar la contraseña.

De momento he estudiado este codigo


function l2j_encrypt($password1)
{ return base64_encode(pack("H*", sha1(utf8_encode($password1)))); }


Pero sinceramente no veo el efecto deseado o soy yo un inutil.

El campo en la bd se llama password1 y password2 (ya que se tiene que confirmar y tal)

En el formulario php tambien se llama password1 y password2.
  #2 (permalink)  
Antiguo 06/10/2011, 09:09
Avatar de h2swider  
Fecha de Ingreso: julio-2007
Ubicación: Ciudad de Buenos Aires
Mensajes: 932
Antigüedad: 17 años, 3 meses
Puntos: 194
Respuesta: problema con la contraseña encriptada

No necesitas guardar 2 campos para confirmar, la confirmación de password la haces con php y luego de que te aseguras que sea la misma lo guardas.

El tema de la encriptación si nunca lo haz hecho, es realmente simple. La función que propones le da algunas vueltas mas para hacerla un poco menos 'descifrable' (y lo digo entre comillas porque no hay manera de volver atras un sha o un md5).

Te recomiendo que uses directamente las funciones md5 o sha1 para encriptar, agregandole alguna palabra secreta de tu web

ejemplo:

Código PHP:
$secret 'JHgv67UgyGY6ugYG786';
$pass md5($secret.$pass);
echo 
$pass
__________________
Codifica siempre como si la persona que finalmente mantedra tu código sea un psicópata violento que sabe donde vives
  #3 (permalink)  
Antiguo 06/10/2011, 09:25
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 13 años, 6 meses
Puntos: 261
Respuesta: problema con la contraseña encriptada

Solo recordarte, md5 tiene una longitud de 32 carácteres, y sha1 40.

Tendrás que hacer los cambios oportunos en la DB según cual elijas, si pones menos longitud, nunca conseguiras que funcione el login.

Saludos,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #4 (permalink)  
Antiguo 06/10/2011, 11:05
 
Fecha de Ingreso: abril-2010
Mensajes: 116
Antigüedad: 14 años, 7 meses
Puntos: 3
Respuesta: problema con la contraseña encriptada

Gracias !! :) Ahora ye está encriptada y me gustaría preguntaros
Otra duda, en el formulario cuando le doy a enviar tengo configurado una serie de opciones que me dice "El campo e-mail no es válido", pero se envía de todas formas al formulario

if($_POST['name'] == ""){
echo 'El campo no puede estar vacio';
}
if($_POST['password1'] != $_POST['password2']){
echo 'Los campos no coinciden...!';
}
if($_POST['email1'] != $_POST['email2']){
echo 'Los campos no coinciden...!';
}

Hay alguna manera de hacer que si no es correcto que no se envíen a la bd?
  #5 (permalink)  
Antiguo 06/10/2011, 11:15
Avatar de morfasto  
Fecha de Ingreso: julio-2011
Ubicación: Lima
Mensajes: 291
Antigüedad: 13 años, 3 meses
Puntos: 8
Respuesta: problema con la contraseña encriptada

Si, controlandolo con un IF.
  #6 (permalink)  
Antiguo 06/10/2011, 11:20
 
Fecha de Ingreso: abril-2010
Mensajes: 116
Antigüedad: 14 años, 7 meses
Puntos: 3
Respuesta: problema con la contraseña encriptada

ok, pero de la manera que lo stoy configurando funcionaría con un if ? o tendria que utilizar otro metodo
  #7 (permalink)  
Antiguo 06/10/2011, 11:23
Avatar de morfasto  
Fecha de Ingreso: julio-2011
Ubicación: Lima
Mensajes: 291
Antigüedad: 13 años, 3 meses
Puntos: 8
Respuesta: problema con la contraseña encriptada

Corrijo mi respuesta.

Tienes varias opciones para eso, podrias usar jquery para validar los campos antes de enviarlos a la base de datos, aqui podras encontrar unos buenos tutoriales de como hacerlo, hasta te dan ejemplos:

http://bassistance.de/jquery-plugins/jquery-plugin-validation/
  #8 (permalink)  
Antiguo 06/10/2011, 11:29
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 15 años, 4 meses
Puntos: 641
Respuesta: problema con la contraseña encriptada

Código PHP:
Ver original
  1. if($_POST['email1'] != $_POST['email2']){
  2. echo 'Los campos no coinciden...!';
  3. }

si haces solo eso, te dara el aviso de que el campo no es valido etc.

pero el script seguira ejecutando por lo que deberas usar un else.

Código PHP:
Ver original
  1. if($_POST['email1'] != $_POST['email2']){
  2. echo 'Los campos no coinciden...!';
  3. }else{
  4. //insertar en la bd
  5. }

para que solo suceda una sola de las dos cosas.

una buena forma de hacer esto más facil es asi:

Código PHP:
Ver original
  1. if($_POST['email1'] != $_POST['email2']){
  2. echo 'Los campos no coinciden...!';
  3. $error = TRUE;
  4. }
  5. if($_POST['name'] == ""){
  6. echo 'El campo no puede estar vacio';
  7. $error = TRUE;
  8. }
  9. if($_POST['password1'] != $_POST['password2']){
  10. echo 'Los campos no coinciden...!';
  11. $error = TRUE;
  12. }
  13.  
  14. if(!isset($error)){
  15.     //ejecutar el query
  16. }
  #9 (permalink)  
Antiguo 06/10/2011, 11:53
 
Fecha de Ingreso: abril-2010
Mensajes: 116
Antigüedad: 14 años, 7 meses
Puntos: 3
Respuesta: problema con la contraseña encriptada

Muchisimas gracias a todos ahora os explico como lo tengo de momento, esto es el codigo

<?php
$sitio="localhost";
$usuario="---";
$pass="---";
$base="kfernandez";
$name=$_POST["name"];
$surname=$_POST["surname"];
$date=$_POST["date"];
$email=$_POST["email"];
$email2=$_POST["email2"];
$password1=$_POST["password1"];
$password2=$_POST["password2"];
$alias=$_POST["alias"];
$con=mysql_connect($sitio,$usuario,$pass);
$secret = 'JHgv67UgyGY6ugYG786';
$password1 = md5($secret.$password1);
echo $password1;
if(mysql_select_db($base,$con)){
$consulta ="insert into web values ('$name','$surname','$date','$email','$email2','$p assword1','$password2','$alias')";
if(mysql_query($consulta,$con))
{
if($_POST['email1'] != $_POST['email2']){
echo 'Los campos no coinciden...!';
$error = TRUE;
}
if($_POST['name'] == ""){
echo 'El campo no puede estar vacio';
$error = TRUE;
}
if($_POST['password1'] != $_POST['password2']){
echo 'Los campos no coinciden...!';
$error = TRUE;
}
echo "El usuario ha sido registrado correctamente";
$error = TRUE;
}
if(!isset($error)){
//ejecutar el query
}
}
else
{
echo mysql_error($con);

}
{
}
?>

Ahora lo que passa en el campo password es que si no coinciden, el uno no se envía, pero el campo 2 si que se envía :(
  #10 (permalink)  
Antiguo 06/10/2011, 11:58
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 15 años, 4 meses
Puntos: 641
Respuesta: problema con la contraseña encriptada

y para que guardas el password2?



eso es solo para que el usuario este seguro de escribir el password correctamente, no necesitas guardarlo, pues es el mismo que el password1
  #11 (permalink)  
Antiguo 06/10/2011, 13:44
 
Fecha de Ingreso: abril-2010
Mensajes: 116
Antigüedad: 14 años, 7 meses
Puntos: 3
Respuesta: problema con la contraseña encriptada

lo del password 2 es para que salga el tipico "vulve a escribir la contraseña"
  #12 (permalink)  
Antiguo 06/10/2011, 13:55
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 15 años, 4 meses
Puntos: 641
Respuesta: problema con la contraseña encriptada

eso ya lo se, pero eso se ocupa solo al registrarse y no es necesario guardarlo en la base de datos, dime
¿para que lo usarias?

hacer eso cada vez que se loguee es anti funcional

de todos modos viendo bien el código, primero insertas la consulta y despues validas

y tienes llaves abiertas y todo extraño, espero que este no sea tu código real, y si es, no me explico como es que funciona.
  #13 (permalink)  
Antiguo 06/10/2011, 13:59
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: problema con la contraseña encriptada

Sí pero no es necesario almacenar ese dato en la Base de Datos, se considera redundancia de información y es parte de lo que tienes que optimizar.

Saludos.
  #14 (permalink)  
Antiguo 06/10/2011, 14:10
 
Fecha de Ingreso: abril-2010
Mensajes: 116
Antigüedad: 14 años, 7 meses
Puntos: 3
Respuesta: problema con la contraseña encriptada

hola, se me estan copiando mal algunas opciones, lo que voy ha hacer y probar va a ser quitar el password2 y dejar solo uno ,

Lo de las dos contraseñas era para el registro.

En el login solo muestro la password1.
  #15 (permalink)  
Antiguo 07/10/2011, 15:38
 
Fecha de Ingreso: abril-2010
Mensajes: 116
Antigüedad: 14 años, 7 meses
Puntos: 3
Respuesta: problema con la contraseña encriptada

Hola de nuevo el formulario me funciona sin error alguno, pero la parte que os comento me sigue sin funcionar

<?php
$sitio="localhost";
$usuario="kfernandez92";
$pass="brothers";
$base="kfernandez";
$name=$_POST["name"];
$surname=$_POST["surname"];
$date=$_POST["date"];
$email=$_POST["email1"];
$email2=$_POST["email2"];
$password1=$_POST["password1"];
$password2=$_POST["password2"];
$alias=$_POST["alias"];
$con=mysql_connect($sitio,$usuario,$pass);
$secret = 'JHgv67UgyGY6ugYG786';
$password2 = md5($secret.$password2);
$secret = 'UFHAHhagdgdfftfstg5';
$password1 = md5($secret.$password1);
if(mysql_select_db($base,$con)){
$consulta ="insert into web values ('$name','$surname','$date','$email','$password1', '$email2','$password2','$alias')";
if($_POST['password1'] != $_POST['password2']){
echo 'Los campos de contraseña no coinciden...!';
$error = TRUE;
}
if($_POST['email1'] != $_POST['email2']){
echo 'Los emails no coinciden!';
if(mysql_query($consulta,$con))
{
echo "El usuario ha sido registrado correctamente";
}
}
}
else
{
echo mysql_error($con);
}
{
}

?>

Necesitaria que me echarais una mano con éste tema, osea que no se puedan enviar los datos , lo he probado como anteriormente me dijisteis pero no pasa nada ? :(
  #16 (permalink)  
Antiguo 09/10/2011, 04:46
 
Fecha de Ingreso: julio-2005
Mensajes: 310
Antigüedad: 19 años, 3 meses
Puntos: 36
Respuesta: problema con la contraseña encriptada

Hola

password1 y password2 nunca serán iguales porque estás haciendo $secret . $passwordX y $secret vale una cosa distinta para password1 y password2 cuando debería valer lo mismo.

Por cierto, estás guardando la información antes de comprobar si la contraseña y el email es válido. Siéntate, coge boli y papel y ves entendiendo y anotando que haces línea por línea. Te aseguro que pierdes un poco de tiempo, pero verás todos los fallos.

Saludos.

Última edición por kiko's; 09/10/2011 a las 04:55
  #17 (permalink)  
Antiguo 09/10/2011, 05:14
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 13 años, 6 meses
Puntos: 261
Respuesta: problema con la contraseña encriptada

Buenas, como apunta kiko's, debería replantear un poco antes que quieres conseguir, para que te resulte más sencillo estructurar el script.

He realizado pequeños cambios y he puesto algunas notas.

Echa un vistazo, no es para que copies y pegues!! es para que compares los cambios e intentes entender el porqué de cada una de las partes y como reacciona el script en función de los datos que recibe.

No lo he probado! así que no se si funciona, pero te puede aportar una de tantas ideas para conseguir el mismo resultado.

Código PHP:
Ver original
  1. <?php
  2. //db
  3. $sitio = "localhost";
  4. $usuario = "kfernandez92";
  5. $pass = "brothers";
  6. $base = "kfernandez";
  7. $con = mysql_connect($sitio, $usuario, $pass);
  8.  
  9. //post
  10. $name = $_POST["name"];
  11. $surname = $_POST["surname"];
  12. $date = $_POST["date"];
  13. $email = $_POST["email1"];
  14. $email2 = $_POST["email2"];
  15. $password1 = $_POST["password1"];
  16. $password2 = $_POST["password2"];
  17. $alias = $_POST["alias"];
  18.  
  19. //pass
  20. $secret1 = 'JHgv67UgyGY6ugYG786';
  21. $secret2 = 'UFHAHhagdgdfftfstg5';
  22. // distingue los pass que vienen por POST y los que asignas hash
  23. // para cambios futuros te resutará más sencillo reescribir el script
  24. $hashPassword1 = md5($secret1 . $password1);
  25. $hashPassword2 = md5($secret2 . $password2);
  26.  
  27. if( mysql_select_db($base, $con) )
  28. {
  29.     // Pones en true Pass y Mail
  30.     $passw = true;
  31.     $mail = true;
  32.     // el password2 creo que sobra en la DB
  33.     $consulta = "insert into web values ('$name','$surname','$date','$email','$hashPassword1', '$email2','$hashPassword2','$alias')";
  34.    
  35.     // Arriba ya has asignado el valor a las variables!!
  36.     //if( $_POST['password1'] != $_POST['password2'] )
  37.     if( $password1 != $password2 )
  38.     {
  39.         echo 'Los campos de contraseña no coinciden...!';
  40.         $passw = false;
  41.     }
  42.    
  43.     // Antes de esto deberías comprobar si ya existe el mail en la DB
  44.     // Arriba ya has asignado el valor a las variables!!
  45.     //if( $_POST['email1'] != $_POST['email2'] )
  46.     if( $email != $email2 )
  47.     {
  48.         echo 'Los emails no coinciden!';
  49.         $mail = false;
  50.     }
  51.    
  52.     // Si falla $pass o $mail pone en false una de las dos variables.
  53.     // por lo que no debería pasar el if
  54.     if( $pass && $mail )
  55.     {
  56.         // si da error la query imprimirá los datos para localizarlo,
  57.         // o puedes guardarlo en la DB para revisarlo a posteriori
  58.         try
  59.         {
  60.             mysql_query($consulta, $con);
  61.         }
  62.         catch( Exception $exc )
  63.         {
  64.             echo 'Ha ocurrido un error al insertar los datos';
  65.             echo $exc->getTraceAsString();
  66.         }
  67.  
  68.         echo "El usuario ha sido registrado correctamente";
  69.     }
  70. }
  71. else
  72. {
  73.     echo mysql_error($con);
  74. }
  75.  
  76. { // <- Estas dos llaves para que?  
  77. } // <-
  78. ?>
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #18 (permalink)  
Antiguo 09/10/2011, 05:27
 
Fecha de Ingreso: abril-2010
Mensajes: 116
Antigüedad: 14 años, 7 meses
Puntos: 3
Respuesta: problema con la contraseña encriptada

coño kiko te llamas como yo xdxdxd

gracias por los datos y estoy mirando lo del php , gracias por aclararme lo de las dos passwords

Y Uncontroled_Duck gracias por el tiempo que has perdido por ponerme las indicaciones estoy aprendiendo php y de momento se realizar esto las variables y mas cosas básicas.

Por supuesto que me lo mirare es la unica manera de aprender y lo de las dos llaves es que estuve viendo un video y me lo cerro de esta manera que por cierto no es la primera persona que me lo comenta.

Saludos!

Última edición por jc92; 09/10/2011 a las 05:35
  #19 (permalink)  
Antiguo 09/10/2011, 12:43
 
Fecha de Ingreso: abril-2010
Mensajes: 116
Antigüedad: 14 años, 7 meses
Puntos: 3
Respuesta: problema con la contraseña encriptada

Hola vuelvo a preguntar porque ahora me viene el problema con el login , cuando inicio la sesión me funciona pero tengo que poner la contraseña encriptada, no la que envía el usuario.

http://img71.xooimage.com/files/9/6/...os-2d96fd7.png

Eso es porque está configurada mal la base de datos?
  #20 (permalink)  
Antiguo 09/10/2011, 12:48
 
Fecha de Ingreso: julio-2005
Mensajes: 310
Antigüedad: 19 años, 3 meses
Puntos: 36
Respuesta: problema con la contraseña encriptada

Hola

Pues recoge la contraseña del usuario:
$password = $_POST['password'];
Cífrala:
$password = md5($secret . $password);
Y ahora haz la consulta a la base de datos utilizando $password
  #21 (permalink)  
Antiguo 10/10/2011, 07:34
 
Fecha de Ingreso: abril-2010
Mensajes: 116
Antigüedad: 14 años, 7 meses
Puntos: 3
Respuesta: problema con la contraseña encriptada

el codigo php que se genera con el dw es el siguiente

<?php require_once('../Connections/localhost.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
if (PHP_VERSION < 6) {
$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
}

$theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
}
?>
<?php
// *** Validate request to login to this site.
if (!isset($_SESSION)) {
session_start();
}

$loginFormAction = $_SERVER['PHP_SELF'];
if (isset($_GET['accesscheck'])) {
$_SESSION['PrevUrl'] = $_GET['accesscheck'];
}

if (isset($_POST['email1'])) {
$loginUsername=$_POST['email1'];
$password=$_POST['password1'];
$MM_fldUserAuthorization = "";
$MM_redirectLoginSuccess = "administracion.php";
$MM_redirectLoginFailed = "redireccionar.php";
$MM_redirecttoReferrer = false;
mysql_select_db($database_localhost, $localhost);

$LoginRS__query=sprintf("SELECT email1, password1 FROM web WHERE email1=%s AND password1=%s",
GetSQLValueString($loginUsername, "text"), GetSQLValueString($password, "text"));

$LoginRS = mysql_query($LoginRS__query, $localhost) or die(mysql_error());
$loginFoundUser = mysql_num_rows($LoginRS);
if ($loginFoundUser) {
$loginStrGroup = "";

if (PHP_VERSION >= 5.1) {session_regenerate_id(true);} else {session_regenerate_id();}
//declare two session variables and assign them
$_SESSION['MM_Username'] = $loginUsername;
$_SESSION['MM_UserGroup'] = $loginStrGroup;

if (isset($_SESSION['PrevUrl']) && false) {
$MM_redirectLoginSuccess = $_SESSION['PrevUrl'];
}
header("Location: " . $MM_redirectLoginSuccess );
}
else {
header("Location: ". $MM_redirectLoginFailed );
}
}
?>

Tengo que cambiar lo que tengo en negrita?

Etiquetas: bd, dudas, md5, pw1, pw2
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 20:54.