Foros del Web » Programando para Internet » PHP »

md5

Estas en el tema de md5 en el foro de PHP en Foros del Web. tengo una aplicacion que maneja usuarios y guardo sus contraseñas en formato md5 (hash). El proble es que cuando el administrador o el propio usuario ...
  #1 (permalink)  
Antiguo 19/01/2007, 09:45
Avatar de carlosmbrizuela  
Fecha de Ingreso: enero-2007
Ubicación: La Plata (Argentina)
Mensajes: 490
Antigüedad: 17 años, 3 meses
Puntos: 1
md5

tengo una aplicacion que maneja usuarios y guardo sus contraseñas en formato md5 (hash). El proble es que cuando el administrador o el propio usuario quiere modificar su contraseña aparece en formato md5. Como puedo hacer para volver a tener la contraseña original.
Le vuelvo a pasar la funcion md5 pero me muestra una contraseña de 32 bits me parece o algo asi

Si esto no es posible que puedo utilizar para que las contraseñas esten encriptadas en la base????
  #2 (permalink)  
Antiguo 19/01/2007, 10:00
Avatar de fatherjuan  
Fecha de Ingreso: mayo-2005
Ubicación: Estado de México
Mensajes: 132
Antigüedad: 18 años, 10 meses
Puntos: 0
Re: md5

Hola, segun tengo entendido una vez encriptado con md5 no puedes obtener la cadena decriptada sino cual seria la seguridad del formato. para administrar contraseñas puedes:

Crear un generador de contraseñas, enviarla por correo al usuario, despues encriptarla y subirla encriptada a tu base de datos. Me explique?
  #3 (permalink)  
Antiguo 19/01/2007, 22:20
Avatar de Dabogam  
Fecha de Ingreso: enero-2007
Ubicación: Mérida, Yucatán
Mensajes: 21
Antigüedad: 17 años, 3 meses
Puntos: 0
Re: md5

MMMM, no entiendo la razon por la cual necesitas mostrarle la contraseña al usuario cuando la quiere cambiar, no le veo el chiste, en dado caso seria conveniente corroborar la contraseña existente al momento de reemplazarla por la nueva, y como dice el compañero la funcion md5 es irreversible.
  #4 (permalink)  
Antiguo 20/01/2007, 02:07
Avatar de carlosmbrizuela  
Fecha de Ingreso: enero-2007
Ubicación: La Plata (Argentina)
Mensajes: 490
Antigüedad: 17 años, 3 meses
Puntos: 1
Re: md5

No quiero mostrarle la contraseña al usuario. Supongamos que al usuario se le asigno la contraseña 123456, si le paso la funcion md5 me tira un string de 32 bits (no recuerdo). Cuando el usuario quiere editar esa contraseña, en el edittext aparecen los 32 bits y nos 6 que se le asigno al principio. se entiende?
  #5 (permalink)  
Antiguo 20/01/2007, 04:40
Avatar de oso96_2000  
Fecha de Ingreso: junio-2002
Ubicación: Distrito Federal
Mensajes: 558
Antigüedad: 21 años, 10 meses
Puntos: 35
Re: md5

Se entiende, y es lo que te estan diciendo.. no hay funcion de php que desencripte una cadena md5..

Si quieres que el usuario cambie su contraseña, tendras que usar otro metodo.. y si no quieres complicarte mucho, usa base64_encode() y base64_decode().. pero no me gusta mucho esa idea
__________________
Sin Ideas
  #6 (permalink)  
Antiguo 20/01/2007, 05:38
(Desactivado)
 
Fecha de Ingreso: enero-2007
Mensajes: 35
Antigüedad: 17 años, 3 meses
Puntos: 1
Re: md5

Crea dos paramentros en tu base de datos , en uno de ellos crea un espacio para la contraseña sin encriptar , en el otro paramentro a guardar la contraseña en formato md5 , de esta forma podras verificar en todo momento la contraseña dada original , cuando el usuario deseee modificar la contraseña podra ver su clave , y no vera la del formato en md5 , podrias crear dos parametros a guardar , pass y pass_real , cuando cambie la contraseña el usuario simplemete se envia la autentica sin encriptar y se encripta al guardar , asi tendras las dos la normal y en formato md5 , saludos
  #7 (permalink)  
Antiguo 20/01/2007, 11:22
Avatar de Dabogam  
Fecha de Ingreso: enero-2007
Ubicación: Mérida, Yucatán
Mensajes: 21
Antigüedad: 17 años, 3 meses
Puntos: 0
Re: md5

efectivamente, esa es otra solucion sin tantas complicaciones
  #8 (permalink)  
Antiguo 20/01/2007, 18:20
Avatar de carlosmbrizuela  
Fecha de Ingreso: enero-2007
Ubicación: La Plata (Argentina)
Mensajes: 490
Antigüedad: 17 años, 3 meses
Puntos: 1
Re: md5

justamente lo que quiero es no guardar la contraseña real en la base. Solo sabe la contraseña el usuario
  #9 (permalink)  
Antiguo 20/01/2007, 19:13
Avatar de oso96_2000  
Fecha de Ingreso: junio-2002
Ubicación: Distrito Federal
Mensajes: 558
Antigüedad: 21 años, 10 meses
Puntos: 35
Re: md5

Pues eso, no puedes saber la contraseña del usuario si la encriptas con md5 =)
Tendrias que buscar otra forma de guardarlas si quieres saberla.
__________________
Sin Ideas
  #10 (permalink)  
Antiguo 20/01/2007, 20:38
Avatar de juaniquillo
Colaborador
 
Fecha de Ingreso: noviembre-2005
Ubicación: San Juan, Puerto Rico
Mensajes: 5.745
Antigüedad: 18 años, 5 meses
Puntos: 281
Re: md5

Si el usuario quiere cambiar su contraseña generas una nueva y se la envias a su email. El despues puede cambiarla a la que quiera. Cuando la quiera cambiar no se la tienes que mostrar. Solo empcripta tambien la que el pasa, ejemplo:

Cambia tu contraseña:
contraseña actual __________
nueva contraseña __________

Código PHP:
if (md5($_POST['contrasena_actual']) == md5($contrasena)) {
//aqui haces el update

__________________
Por fin.. tengo algo parecido a un blog
Y por lo visto ya estoy escribiendo...
  #11 (permalink)  
Antiguo 20/01/2007, 23:30
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 8 meses
Puntos: 102
Re: md5

Cita:
Iniciado por carlosmbrizuela Ver Mensaje
justamente lo que quiero es no guardar la contraseña real en la base.
Justamente guardar la contraseña "plana" es lo que NO debes hacer .

Pero vamos... ya se dijo e igual lo pregunto ¿para qué quieres mostrar la contraseña "antigua" (por eliminar)?, NO tiene ningún sentido... ¿en qué sistema has visto eso?; no te fíes de él .

Saludos
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #12 (permalink)  
Antiguo 22/01/2007, 08:25
Avatar de carlosmbrizuela  
Fecha de Ingreso: enero-2007
Ubicación: La Plata (Argentina)
Mensajes: 490
Antigüedad: 17 años, 3 meses
Puntos: 1
Re: md5

que funciones puedo usar para encriptar y desenriptar contraseñas??????????
  #13 (permalink)  
Antiguo 22/01/2007, 08:38
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Re: md5

Carlos, me parece que estas teniendo un conflicto interno :P, relee todo lo explicado, o entendé como funciona md5. Esta todo explicado arriba como debería funcionarte la aplicación.

PD: mayerly, lo que propones es ilógico, la idea de usar md5 es darle al usuario la seguridad de no obtener de ninguna manera su pass, es mas, no tiene mucho sentido pasarlo por md5 sin una "sal" como lo esta haciendo Carlos (ej, Mal o no del todo seguro: md5($pass) Correcto o mas seguro: md5($pass.$sal), habiendo variantes mas complejas ), así, aún teniendo la db es casi imposible por brutal force obtener algún dato.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #14 (permalink)  
Antiguo 25/01/2007, 04:29
(Desactivado)
 
Fecha de Ingreso: enero-2007
Mensajes: 35
Antigüedad: 17 años, 3 meses
Puntos: 1
Re: md5

Cita:
PD: mayerly, lo que propones es ilógico
En todo caso el ilogico eres tu mijo , puesto q si tu lees el post el chico pretende q el usuario vea su contraseña sin md5 , a pues entonces dime tu como lo hacemos , el md5 no puede ser reversible una de dos para hacer eso lo guardas asi o lo guardas , asi q antes de faltar lee el post que nadie te falto a ti mijo , hasta pronto
  #15 (permalink)  
Antiguo 25/01/2007, 05:27
hmv
 
Fecha de Ingreso: abril-2005
Mensajes: 323
Antigüedad: 19 años
Puntos: 0
Re: md5

Pues creo q hay otra solución, en la red hay algoritimos de encriptación en la cual tu le puedes mandar 2 parametros el $password y $clave_privada(la clave q tu elijas) es decir para poder encriptar o desencriptar necesitas esta clave privada. Esta clave_privada la puedes poner dentro de tu mismo script.
Código PHP:
include("5CR.php");

$clave_privada "5498798798()723569++32423++";
$password"HolaMundo!";

$encriptacion = new E5CR($clave_privada );
echo 
"Mensaje Original: <b>$password</b><br>";

$encriptacion->encriptar($password,0);
echo 
"Mensaje Encriptado: <b>$password<b>"
class 5CR.php
Código PHP:
// +----------------------------------------------------------------------+
// | PHP Version 5                                                        |
// +----------------------------------------------------------------------+
// | Copyright (c) 2005 Julian Andrés Lasso Figueroa                      |
// +----------------------------------------------------------------------+
// | Este codigo está sujeto a la licencia GPL, cualquier bug encontrado  |
// | por favor avisarme con un correo a [email protected]         |
// | Este codigo está basado en RC4 v 1.6                                 |
// +----------------------------------------------------------------------+
// | Autor: Julian Andrés Lasso Figueroa <[email protected]>      |
// +----------------------------------------------------------------------+
// 5CR.php, v 2.0 09/05/2005 10:50:00 p.m.

class E5CR{
    
    var 
$s = array();
  var 
$i 0;
  var 
$j 0;
  var 
$_key;
  var 
$bytes 256;
  
  function 
E5CR($key null)
  {
    if (
$key != null) {
      
$this->juego_de_llaves($key);
    } 
  }
  
  function 
juego_de_llaves($key)
  {
    if (
strlen($key) > 0)
      
$this->_key $key;
  }

  function 
llave(&$key)
  {
    
$len strlen($key);
    for (
$this->0$this->$this->bytes$this->i++) {
      
$this->s[$this->i] = $this->i;
    } 

    
$this->0;
    for (
$this->0$this->$this->bytes$this->i++) {
      
$this->= ((($this->$this->s[$this->i] + ord($key[$this->$len])) % $this->bytes) / 3);
      
$this->+= ((($this->$this->s[$this->i] + ord($key[$this->$len])) % $this->bytes) % 12);
      
$t $this->s[$this->i];
      
$this->s[$this->i] = $this->s[$this->j];
      
$this->s[$this->j] = $t;
    } 
    
$this->$this->0;
  }
  
  function 
hex2bin(&$RawInput)
  {
        
$BinStr '';
        for (
$i 0$i strlen ($RawInput); $i += 2)
            
$BinStr .= '%'.substr ($RawInput$i2);
        
$RawInput rawurldecode($BinStr);
    }

  function 
encriptar(&$encript$tipo)
  {
      
$this->llave($this->_key);
        
$len strlen($encript);
        for (
$c 0$c $len$c++) {
            
$this->= ((($this->1) % $this->bytes) / 3) + ((($this->$this->s[$this->i] + ord($key[$this->$len])) % $this->bytes) % 12);
          
$this->= ((($this->$this->s[$this->i]) % $this->bytes) / 3) + ((($this->$this->s[$this->i] + ord($key[$this->$len])) % $this->bytes) % 12);
          
$t $this->s[$this->i];
          
$this->s[$this->i] = $this->s[$this->j];
          
$this->s[$this->j] = $t;
        
          
$t = ((($this->s[$this->i] + $this->s[$this->j]) % $this->bytes) / 3) + ((($this->$this->s[$this->i] + ord($key[$this->$len])) % $this->bytes) % 12);
        
          
$encript[$c] = chr(ord($encript[$c]) ^ $this->s[$t]);
        }
        
        
// 0 = claves y 1 = url
      
switch($tipo){
          case 
0:
            
$encript crc32(sha1(md5(bin2hex($encript))));
            break;
          case 
1:
              
$encript bin2hex($encript);
          case 
2:
              
$encript;
      }
  }
  
  function 
destrozar(&$cadena$num){
        for(
$i=0;$i<$num;$i++){
            
$pos strpos($cadena,"="); // posición del primer =
            
$campo substr($cadena,0,$pos); // sustración del nombre del campo
            
$cadena substr($cadena,$pos+1,strlen($cadena)); // actualización de la cadena
            
$pos strpos($cadena,"&"); // posición del primer &
            
if($pos == null)
                
$pos strlen($cadena);
            
$contenido substr($cadena,0,$pos);
            
$cadena substr($cadena,$pos+1,strlen($cadena)); // actualización de la cadena
            
$datos[$campo] = $contenido;
            
        }
        return 
$datos;
  }
  
  function 
desencriptar(&$desencript$num)
  {
      
$this->hex2bin($desencript);
    
$this->encriptar($desencript,2);
         
$desencript $this->destrozar($desencript$num);
  }

  #16 (permalink)  
Antiguo 25/01/2007, 07:14
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Re: md5

Cita:
Iniciado por mayerly Ver Mensaje
En todo caso el ilogico eres tu mijo , puesto q si tu lees el post el chico pretende q el usuario vea su contraseña sin md5 , a pues entonces dime tu como lo hacemos , el md5 no puede ser reversible una de dos para hacer eso lo guardas asi o lo guardas , asi q antes de faltar lee el post que nadie te falto a ti mijo , hasta pronto
Cuando digo "ilógico" me refiero a eso, que no tiene lógica lo que propones (a guardar el original y el md5 separados, en todo caso no guardas el md5 y listo, ya que teniendo el original tener éste no sería necesario). Y no es ningún insulto, si así lo tomaste lo lamento, no fue la intención, es un foro, y como tal todos somos libres de dar una opinión, fue todo lo que hice.

__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #17 (permalink)  
Antiguo 27/01/2007, 14:52
(Desactivado)
 
Fecha de Ingreso: enero-2007
Mensajes: 35
Antigüedad: 17 años, 3 meses
Puntos: 1
Re: md5

Eso mi jo no es dar una opinion , tu no tienes nada q opinar sobre lo q yo le di al chico como solucion , el chico claramente queria guardar las dos tipos de claves dadas pues entonses q quieres se haga , en todo caso dile ilogico a el , no se quien tu te crees para a los q postulamos aqui una ayudita criticalos y decirle sandeces , tu aporta tu idea como todos pero no andes a calificar de ilogicos o no a los demas , la aportaste ok , pero el resto de criticar e ilogico y no se que , me parece que los q son como usted lejos de aportar al foro se dedican a enmarañarlo y ofuscarlo , el chico es el protagonista ni yo ni usted asi q dediquese a atender lo que le pregunten o no participe con calificaciones o alusiones personales
  #18 (permalink)  
Antiguo 27/01/2007, 15:56
Avatar de traviesaFeliz  
Fecha de Ingreso: mayo-2006
Ubicación: Ambato
Mensajes: 28
Antigüedad: 17 años, 11 meses
Puntos: 0
Re: md5

bueno puedo decir que md5 es irreversible, pero si no quieres utilizar la solucion de guardar en formato md5 y normal, utiliza la recomedacion que te dieron anteriormente de utilizar base64_encode() y base64_decode() si funcionan ya las he utilizado..
__________________
:-) TraviesaFeliz
La vida es muy linda cuidala :arriba:
Saldos a todos
  #19 (permalink)  
Antiguo 27/01/2007, 16:32
 
Fecha de Ingreso: julio-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.304
Antigüedad: 18 años, 9 meses
Puntos: 6
Re: md5

Cita:
Iniciado por mayerly Ver Mensaje
el chico claramente queria guardar las dos tipos de claves dadas pues entonses q quieres se haga
Donde dijo eso el "chico"? Si mal no lei, solo queria guardar la contraseña encriptada pero a la vez poder desencriptarla...

Cita:
Iniciado por carlosmbrizuela Ver Mensaje
justamente lo que quiero es no guardar la contraseña real en la base. Solo sabe la contraseña el usuario
y para eso se le puede informar de un metodo alternativo a md5, por ejemplo...

Cita:
Iniciado por traviesaFeliz Ver Mensaje
utiliza la recomedacion que te dieron anteriormente de utilizar base64_encode() y base64_decode() si funcionan ya las he utilizado..


Cita:
Iniciado por mayerly Ver Mensaje
Eso mi jo no es dar una opinion , tu no tienes nada q opinar sobre lo q yo le di al chico como solucion
Gracias a gente(como nicolas) que revisa las respuestas de los demas (las mias por ejemplo) se evita que muchos novatos( como yo) cometamos errores a pesar de la buena voluntad de quien responde.

Saludos.
__________________
Federico.

Mi página: www.jourmoly.com.ar
  #20 (permalink)  
Antiguo 27/01/2007, 17:02
Avatar de carlosmbrizuela  
Fecha de Ingreso: enero-2007
Ubicación: La Plata (Argentina)
Mensajes: 490
Antigüedad: 17 años, 3 meses
Puntos: 1
Re: md5

che no se peleen que la salucion ya la tuve. gracias a todos/as.
  #21 (permalink)  
Antiguo 27/01/2007, 19:06
Avatar de juaniquillo
Colaborador
 
Fecha de Ingreso: noviembre-2005
Ubicación: San Juan, Puerto Rico
Mensajes: 5.745
Antigüedad: 18 años, 5 meses
Puntos: 281
Re: md5

pues por favor explica que has hecho para queda para que esto no termine en un motin...
__________________
Por fin.. tengo algo parecido a un blog
Y por lo visto ya estoy escribiendo...
  #22 (permalink)  
Antiguo 27/01/2007, 21:45
(Desactivado)
 
Fecha de Ingreso: enero-2007
Mensajes: 35
Antigüedad: 17 años, 3 meses
Puntos: 1
Exclamación Re: md5

Cita:
Gracias a gente(como nicolas) que revisa las respuestas de los demas (las mias por ejemplo) se evita que muchos novatos( como yo) cometamos errores a pesar de la buena voluntad de quien responde.
A mi tus experiencias me dan igual , yo aporto mi idea lo de ilogico sobra y punto y se acabo y si quieres discutir que te pongan un foro , yo aporto mi idea como todos y todas y nada mas y si quiere revisar q se meta a dar clases a una academia yo no estoy preguntando estoy respondiendo y doy mi aportacion e idea y punto el si me parece eilogico , tan sabio te crees y tan ignorante eres mijo , humildad cero y sapiencia idem asi q a hacer de abogado ve a juicio
  #23 (permalink)  
Antiguo 27/01/2007, 23:41
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 8 meses
Puntos: 102
Re: md5

mayerly: Antetodo, por favor, un poco de serenidad.

Esto es un Foro y la idea es el intercambio de información, ideas, problemas y soluciones buscando una discución sana y productiva. El modelo de pregunta-respuestas es para otro tipo de sitios, deberiamos evitar aquí esos vicios.

Veo te ofendió nicolaspar mencionó era ilógico lo que planteabas... bien, será algo subjetivo al fin de cuentas pero no veo ningún tipo de ofensa en sus palabras, más aún, tiene toda la razón (no es porque yo la tenga, pero me cito: "NO tiene ningún sentido..."). Coincidió con opiniones anteriores en que "el problema", la situación, estaba mal planteada desde un comienzo, es un error "solucionar por solucionar" lo que carlosmbrizuela se proponía.

Se entiende perfectamente que diste "una solución que cumple con el objetivo", y se agradece la colaboración al foro en general (y espero carlosmbrizuela también lo agradezca en lo personal), pero realizarlo cuál lo planteas significa un problema básico de seguridad. Habemos muchos aquí que estamos con el propósito de aprender en lo posible y agradecemos la el señalamiento a dicho error. Que cada quien lo valore, que cada quien se la crea, que cada quien saque conclusiones.

Por favor, humildad para separar los temas y no entrar en discuciones personales. Nuevos mensajes que no sugieran algo respecto a la metodología del manejo de contraseñas, la encriptación, seguridad y código PHP en general, no serán permitidos.



carlosmbrizuela: Bien que "ya tienes solución" pero... ¿y?. Como dije inicialmente, aunque nadie te obliga a compartirlo, la idea compartas dicha solución. Evitemos el modelo pregunta-respuesta y enriquese el contenido que quizá (seguramente) a otro le sirva.

Paz, amor y PHP
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #24 (permalink)  
Antiguo 29/01/2007, 08:13
Avatar de carlosmbrizuela  
Fecha de Ingreso: enero-2007
Ubicación: La Plata (Argentina)
Mensajes: 490
Antigüedad: 17 años, 3 meses
Puntos: 1
Re: md5

he utilizado las funciones base64_encode() y base64_decode().
Dejen de pelear por pavadas. Aca estamos para ayudarnos no para bardearnos.
  #25 (permalink)  
Antiguo 29/01/2007, 08:44
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Re: md5

Uy!, que quilombete che!...

mayerly
, nuevamente, por si no quedo claro en mi anterior post...disculpas!, no fue la intención ofenderte.

Carlos, usar base64 o cualquier método que tenga una vuelta no es seguro, para eso podes guardarlo directamente.

Cuando usamos algún método para encriptar algún dato "password" como es tu caso, la idea es que no se pueda romper, para darle la seguridad al usuario de que NADIE, ni nosotros mismos, sepamos cual es su password.

Que se hace entonces en estos casos?, simple, guardar su pass encriptado.
Si en algún momento lo quiere regenerar tenes varias maneras de hacerlo pero la que dice juaniquillo es de las mejores.

De esta manera siempre, el único que sabe el pass es el usuario, además, que NUNCA debería mostrarlo en pantalla, eso es inseguro para él, y esto lo digo esté o no encriptado el pass (imaginate que este en un cyber y alguien pase por atrás).
Seguramente ya trabajaste y lo adaptaste con base64, pero no fue la mejor idea...Hago hincapié en esto porque es bueno que se hagan las cosas bien, o al menos lo mejor posible, eso para mi es lo mas importante y es la diferencia entre una buena aplicación del resto.


PD: Espero que esto no genere nuevas discusiones ;)
__________________
Mi punto de partida es Que Bueno Lo Nuevo
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 03:57.