Foros del Web » Programando para Internet » PHP »

problema para desacer PASSWORD() de mysql

Estas en el tema de problema para desacer PASSWORD() de mysql en el foro de PHP en Foros del Web. hola, con php inserto una nueva fila en una tabla con una sentecia sql paraecida a esta: $sql = "INSERT INTO usuarios ( 'Nick' , ...
  #1 (permalink)  
Antiguo 06/11/2003, 19:17
 
Fecha de Ingreso: octubre-2003
Mensajes: 139
Antigüedad: 20 años, 5 meses
Puntos: 0
Pregunta problema para desacer PASSWORD() de mysql

hola, con php inserto una nueva fila en una tabla con una sentecia sql paraecida a esta:

$sql = "INSERT INTO usuarios ( 'Nick' , 'Contraseña' ) VALUES ('nickejemplo', PASSWORD( 'patata' ))";

(nota: si veis algun error aqui no hagais caso, esta es + o - la que utilizo).
esta sentencia me funciona bien y los datos quedan guardados en la tabla.
con lo de PASSWORD() lo que ago es "codificar" PATATA en la tabla... o sea que en la tabla en vez de patata, hay 1e28754a69 (este valor es inventado, pero sale algo parecido). despues ago que una variable adquiera ese valor de la tabla (eso en otra pagina para utilizarla en otra cosa). con lo que la variable $Contraseña adquiere el vaor "1e28754a69".
pues lo que quiero es pasar ese "1e28754a69" a patata. como se podria hacer esto? existe alguna funcion? o tendria que hacerlo con mysql?

gracias adelantadas
  #2 (permalink)  
Antiguo 06/11/2003, 20:01
 
Fecha de Ingreso: octubre-2003
Ubicación: Concepción
Mensajes: 84
Antigüedad: 20 años, 5 meses
Puntos: 0
Es dificil lo que quieres hacer, y me parece q no se puede, por la documentación de PHP las fucniones que te permiten realizar encriptación son por decirlo de alguna forma "unidireccionales", o sea realizar el proceso inverso es imposible.

Revisa la documentación, tal vez puedas encontrar algo q te ayude.

http://cl.php.net/manual/es/function.crypt.php

Saludos.
  #3 (permalink)  
Antiguo 06/11/2003, 20:24
Avatar de nuevo  
Fecha de Ingreso: mayo-2003
Ubicación: Spain
Mensajes: 2.009
Antigüedad: 20 años, 10 meses
Puntos: 2
no, si has usado MD5 para encriptar el pass, ya no se puede desencriptar, bueno si.... pero necesitarias almenos 2 vidas propias para poderlo ver, insert coin...

lo que se hace es comparar los resultados de la base de datos con los introducidos mediante un formulario o lo que se use, solo comparaciones, pero claro, el pass introducido del formulario tb tiene que ser encriptado a MD5, asi los dos valores son correctos !== juas!
__________________
3w.valenciadjs.com
3w.laislatv.com
  #4 (permalink)  
Antiguo 06/11/2003, 22:22
 
Fecha de Ingreso: octubre-2003
Ubicación: Concepción
Mensajes: 84
Antigüedad: 20 años, 5 meses
Puntos: 0
A lo q yo iba era que no existe una funcion en PHP p.ejem decrypt() que funcione por ejemplo:

$desenc=decrypt('1sdfjkhasdf76')
echo $desenc // q mostraria por ejemplo patata

Por supuesto lo q se hace es lo q tu mencionas: se ingresa el password por el formulario se encripta de nuevo y se compara el valor con los datos de la BD.

Saludos
  #5 (permalink)  
Antiguo 07/11/2003, 00:28
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 6 meses
Puntos: 41
la función PASSWORD() de Mysql es de una sola vía.. o sea, es irreversible. Y así debe ser para mantener las contraseñas seguras. No veo para qué necesitas las contraseñas de tus usuarios. Las contraseñas deben ser irreversibles... y si por ahí algún usuario olvida su password.. yo creo que lo más seguro es generarle uno nuevo y enviárselo por mail... Luego si quiere él que lo cambie...

Pero si pese a todo quieres poder desencriptar las contraseñas tal vez puedas utilizar las funciones base64 encode y decode de php... pero de verdad... no es muy seguro tener las contraseñas "desencriptables".

Saludos
  #6 (permalink)  
Antiguo 07/11/2003, 07:12
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
No normal cuando se usan passwords codificados en MD5() .. PASSWORD() o cualquier otro "hash" que sea irreversible (no desencriptable) .. es, si tu usuario perdió su contraseña, le generas otra y se la comunicas (se la envias por e-mail .. se la enseñas .. le llamas por telefono xD .. ahí tu veras). Y .. posteriormente si lo deseas le invitas a tu usuario a que una vez autentificado (con esa contraseña "provisional" ... que la cambie por una que más le agrade).

De esta forma .. NI tu ni nadie (ni los Srs.. adminstradores de Hosting aburridos xDD) puedan ver tus contraseñas.

Un salduo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 07/11/2003, 11:47
 
Fecha de Ingreso: octubre-2003
Mensajes: 139
Antigüedad: 20 años, 5 meses
Puntos: 0
a ver si me explico...
en la tabla queda guardado el valor 1e28754a69.
pues lo que quiero es que la gente se identifique (que ponga nick y password) pero claro... si yo voy a la web y pongo mi contraseña PATATA pues tengo un problema pq no me dejara entrar ya que en la tabla hay 1e28754a69 y no PATATA.... me entendeis ahora?

lo que me pasa es que quiero desencriptar 1e28754a69 a patata para poder relacionarlo con la contraseña que pongo en un formulario de identificacion....
y la variable que hago que coja el valor de la tabla adquiere 1e28754a69 y quiero que esa variable contenga PATATA...

espero averme exlicao bien... :P

gracias a todos por vuestras respuestas...

si no se pude hacer lo que pido pues decidme funciones para encryptar y su correspdiente para desencrytar...

Última edición por cards; 07/11/2003 a las 12:03
  #8 (permalink)  
Antiguo 07/11/2003, 13:17
 
Fecha de Ingreso: octubre-2003
Ubicación: Concepción
Mensajes: 84
Antigüedad: 20 años, 5 meses
Puntos: 0
Cards, parece que todavia no entendiste. en PHP no puedes volver hacia atras cuando encriptas (crypt()) o codificas (md5()) una clave.

Esta claro q en tu BD guardas el valor '1e28754a69'. Pues lo q tienes q hacer, cuando en tu formulario de ingreso solicitas el login y el password es tomar la variable que corresponde al password (q en este caso es PATATA), codificarla con alguna función (como te digo crypt() o md5()) y luego realizar la comparacion.

Si tu formulario dice algo asi:

<form action=validar.php method=post>
...
<input type=password name=clave>
</form>

Lo q debieras hacer en PHP es lo siguiente:
(suponiendo que tienes register_globals en OFF)
Código PHP:

$db
=mysql_conbnect('localhost','user','xxx');
mysql_select_db("basedatos");
$consulta="select Login,Password from Usuarios where Login like '".$_POST["login"]."'";
$sql_result=mysql_query($consulta);
$resultado=mysql_fetch_array($sql_result);
if (
$resultado["Login"]=="yomismo" && $resultado["Password"]==md5($_POST["password"]))
{
  
ingresar
}
else
{
 
contraseña o login invalido

Como puedes ver para comparar el password guardado en la BD debes tomar el valor que viene desde el formulario ($_POST["Password"]) y codificarlo (con md5()) para poder compararlo. Esa es la solución.

Depende de la función que estes utilizando para codificar tu password, el código anterior puede variar.

Saludos

Última edición por heraldex; 07/11/2003 a las 13:26
  #9 (permalink)  
Antiguo 07/11/2003, 15:28
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
Si usas PASSWORD() .. aplicalo al hacer tu consulta:

Código PHP:
$consulta="select COUNT(*) from Usuarios where Login='".$_POST['login']."' AND PASSWORD('".$_POST['password']."')'";
$sql_result=mysql_query($consulta);
$resultado=mysql_result($sql_result,0);
if (
$resultado == 1){
 
//  ingresar es correcto el usuario y password.
}else{
 
// contraseña o login no valido

Uso COUNT() de Msyql para contar los registros que me puede devolver la condición (WHERE) .. uso PASSWORD() que es la función que usastes para codificar tus password (podría ser MD5() de PHP o de Mysql ..) Todo esto es SQL .. www.mysql.com

Y .. cards .. no te enfades si no te entendemos .. simplemente explicalo de otra forma (como ha sucedido)....

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 07/11/2003 a las 15:31
  #10 (permalink)  
Antiguo 07/11/2003, 22:25
Avatar de nuevo  
Fecha de Ingreso: mayo-2003
Ubicación: Spain
Mensajes: 2.009
Antigüedad: 20 años, 10 meses
Puntos: 2
juas, pues coge el valor del formulario y encriptalo en MD5 o lo que sea, y lo comparas con el de la base de datos, entonces si seran los mismos.... vamos... es lo logico no?

Código PHP:
$varPass md5($POST[passFormulario]);// encriptacion metodo MD5


//sentencias sql para sacar el pass del usuario

if($varPass == $sqlVarPass){
echo 
"iguales";
}else{
echo 
"diferentes";

__________________
3w.valenciadjs.com
3w.laislatv.com
  #11 (permalink)  
Antiguo 07/11/2003, 23:04
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 6 meses
Puntos: 41
nuevo y heraldex:
creo que el título de este tema dice claramente que cards utiliza la funcion PASSWORD() de Mysql... ni crypt() ni md5()... no lo confundamos más... Cluster ya respondió cómo se utiliza esa función. Se hace dentro de la consulta misma.

cards:
-Como verás en el post de Cluster. En la consulta a la BD para validar la contraseña utilizas la función PASSWORD() de la misma manera en que la utilizaste para añadir ese registro a la BD.
-Como verás en el post mío (que luego Cluster plagió descaradamente inmediatamente después xD...). Ya que tienes el problema de la validación resuelto... Es más seguro que tus contraseñas permanezcan encriptadas.

Nada más.

Saludos

P.D: Cluster... ya pe no te copies las ideas xD... xD... :P!

Última edición por jpinedo; 08/11/2003 a las 16:07
  #12 (permalink)  
Antiguo 07/11/2003, 23:32
 
Fecha de Ingreso: octubre-2003
Ubicación: Concepción
Mensajes: 84
Antigüedad: 20 años, 5 meses
Puntos: 0
Esta bien Jpinedo, pero no te enfades, pesonalmente no fue
mi intencion cambiar el hilo de la discusión, en parte quise
proponerle otra idea, además cards
en su post escribio:

Cita:
pues lo que quiero es pasar ese "1e28754a69" a
patata. como se podria hacer esto?
existe alguna funcion? o tendria que hacerlo con mysql?
Pues lo demas ya es conocido. En todo caso creo q entre todos
definitivamente le dijimos que no tiene necesidad de "descifrar"
la contraseña para verificarla, en otras palabras le indicamos el
método correcto, utilizando las funciones que se ocupan en forma
más común.

Eso, Saludos a todos
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 07:03.