Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 31-12-2007
Avatar de david_uh
david_uh david_uh is offline
Miembro
 
Registrado: may 2007
Ubicación: Arequipa, Perú
Posts: 227
Poder: 17
david_uh Va por buen camino
Gestionar contraseñas ??????????

hola foro
dos
preguntas

1.- Tengo un formulario que gestiona una tabal usuarios que esta en mysql5 en la cual uno delos campos es clave(osea donde almacena su clave), su longitud es de 41 caracteres, esa codificado usando la funcion SHA de mysql, donde para almacenar una contraseña pongo sha("clave") y sale una serie de numero y letras que son en total 41
todo bien hasta aqui el problema es que nesecito gestionar esto por medio de un formulario, donde se ingresan nombres, apellidos usuario y contraseña, pero al almacenar la contraseña el hago los siguiente
Código Delphi [-]
 
ztemp.sql.text := 'select sha("' + edit1.text + '");
zquery.fieldbyname('clave'):= ztemp.fields[0].asString;
el problema es que al navegar por lo registros a travez del form aparece la contraseña encriptada, no la normal como hago para recuperar la normal para que el usuario sepa cual es su contraseña en todo momento

2.- es cierto que Oracle compro a borland?

me despido agradecido de antemano por cualquier respues
__________________
Yo se que muchas veces te paso ESTO
Responder Con Cita
  #2  
Antiguo 31-12-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

La contraseña "normal" o "en claro" es la que el usuario te proporciona... es decir, tú has de limitarte a comprobar si el SHA (en este caso) de la contraseña "en claro" (que te proporciona el usuario) coincide con el SHA que se guarda en la base de datos para dicho usuario. Pero, de entrada tú ya tienes la contraseña "en claro", y, por otro lado, no podrías obtenerla de la base de datos, puesto que se guarda ya "cifrada".

PD. Ignoro ahora si se guarda cifrada o si SHA es un "hash" de la contraseña. Esto último es lo habitual, guardar un "hash" de la contraseña, no una cadena cifrada, puesto que se entiende que un "hash" no puede revertirse, mientras que una cadena cifrada siempre podría descifrarse.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 31-12-2007
JXJ JXJ is offline
Miembro
 
Registrado: abr 2005
Posts: 2.475
Poder: 22
JXJ Va por buen camino
eso no se tiene que hacer.

la seguridad de tu sistema esta en que la contraseña
esta cifrada.

si quieres que el usuario, vea la contraseña, entonces, no la cifres.

2 de donde sacas eso de oracle y borland???
Responder Con Cita
  #4  
Antiguo 31-12-2007
Avatar de david_uh
david_uh david_uh is offline
Miembro
 
Registrado: may 2007
Ubicación: Arequipa, Perú
Posts: 227
Poder: 17
david_uh Va por buen camino
ya, por ejemplo si el usuario desea loguearse ingresa su contraseña y loque yo hago para verificar si la contraseña ingresada es la que corresponde con la guardada en la tabla hago esto
c:= edit1.text;
ZTEMp.sql.text := 'select sha(" ' + c + '")';
ZTEMp.open;
if zUsuers.FieldByName('pwd').asString=ZTEMp.fields[0].asstring thenç
//aceesos concebido
else
//denegado

lo que deseo hacer el lo contrario
__________________
Yo se que muchas veces te paso ESTO
Responder Con Cita
  #5  
Antiguo 31-12-2007
Avatar de david_uh
david_uh david_uh is offline
Miembro
 
Registrado: may 2007
Ubicación: Arequipa, Perú
Posts: 227
Poder: 17
david_uh Va por buen camino
un compañero de trabajo me comento que oracle compro a borland por eso pregunto seeeeraaaa ciero eso!!!!
__________________
Yo se que muchas veces te paso ESTO
Responder Con Cita
  #6  
Antiguo 31-12-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

A ver, porque creo que estamos liando las cosas, y no sólo con el tema de Oracle y Borland. Hasta donde yo llego, las contraseñas no se guardan cifradas, esto es, si entendemos por cifradas algo que podría llegar a descifrarse conociendo el algoritmo y la clave oportuna.

SHA significa "Secure Hash algorithm", es decir, que no se trata de un algoritmo de cifrado (aunque reconozco que yo aquí estoy más perdido que un pavo en un garaje el día de navidad), pero es un algoritmo de "hashing". No es lo mismo. El primero se puede revertir, el segundo no.

En mi experiencia, lo que se guarda en una base de datos no son las contraseñas de los usuarios en claro, ni si quiera cifradas, sino que lo que se guarda es un "hash" de las contraseñas, ni más, ni menos. De ese modo, ni siquiera el administrador del sistema puede conocer la contraseña de un usuario, en teoría.

Ahora tú supón que tienes una tabla "users" con los campos "user_login" y "user_password". El usuario te proporciona su login y contraseña (en claro) y tú tienes que verificar si efectivamente es un usuario registrado o no lo es. La consulta SQL debería quedar tal que así:

Código SQL [-]
SELECT user_id FROM users WHERE (user_password = SHA(input_password))  AND (user_login = input_login);

¿Se comprende? Tú ya tienes la contraseña en claro: te la tiene que proporcionar el usuario. Y lo que tú haces es obtener el "hash" de esa contraseña en claro que te proporciona el usuario y buscar ese "hash" en la tabla de usuarios. Si el "hash" aparece, significa que la contraseña proporcionada es correcta, puesto que su "hash" coincide con el guardado en la base de datos.

Otra cosa es lo que apunta la consulta SQL que he puesto arriba: habría que comprobar también el login de usuario, suponiendo que dos usuarios podrían tener la misma contraseña. Y acaso haya que tener otras cosas en cuenta en este sentido, pero, en todo caso, insisto, si lo que quieres es la contraseña en claro del usuario... este mismo te la da. Y además tiene que ser así, siempre que sólo guardes el "hash" de las contraseñas en la base de datos: tú no puedes deducir de un "hash" la contraseña correspondiente.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 31-12-2007 a las 01:08:42.
Responder Con Cita
  #7  
Antiguo 31-12-2007
JXJ JXJ is offline
Miembro
 
Registrado: abr 2005
Posts: 2.475
Poder: 22
JXJ Va por buen camino
ya lo dijo dec. si quieres saber que cadena de caracteres, o
que contraseña uso el usuario, a partir del hash que tienes en tu base de
datos no vas a poder usando hash,

lo que necesitas es un algoritmo reversible (tu lo puedes hacer quitando ponienodo
datos a la contraseña de tus usuario. una funcion servira.)
digamos, como lo hacen los programadores que hacen software trial
tu te registras, y el fabricante del software. te envia por mail
un archivo de texto con tu serial o llave. para volver tu version trial
en completamente funcional,

yo he visto este tipo de mecanismos.

la cadena devuelta es de este tipo de carateres sin sentido

deoidadoah233208===00=02342e23

al ingresarla y usar la opcion acerca de o about. del programa
me dice

software registrado a jxj del empresa JXJ, Enterprise Unlimited Internacional

siendo que antes de registrarlo decia
software no registrado.
Responder Con Cita
  #8  
Antiguo 31-12-2007
JXJ JXJ is offline
Miembro
 
Registrado: abr 2005
Posts: 2.475
Poder: 22
JXJ Va por buen camino
si eso es cierto oracle se me adelanto a comprar borland
Responder Con Cita
  #9  
Antiguo 31-12-2007
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Todo lo que te han dicho es totalmente válido. El Hash lo que hace de una u otra forma es almacenar la contraseña de forma que no sea visible desde afuera. No hes seguro "browsear" la tabla mediante un grid o similar para ver las contraseñas, después de todo ni siquiera el administrador las debe conocer. Para los casos en los que el usuario pierde u olvida su contraseña lo normal es "resetearla" asignándole una contraseña por default que obviamente el usuario tiene que cambiar en cuanto se loguea por primera vez al sistema.

Lo más normal es solo poder consultar una lista con los nombres de usuario o sus privilegios más no sus contraseñas. Como ya comenté el administrador no puede ni debe tener acceso a la "llave" de los usuarios, este es un prinicipio básico de seguridad.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #10  
Antiguo 31-12-2007
Avatar de david_uh
david_uh david_uh is offline
Miembro
 
Registrado: may 2007
Ubicación: Arequipa, Perú
Posts: 227
Poder: 17
david_uh Va por buen camino
bien gracias por sus aportes fueron útiles
__________________
Yo se que muchas veces te paso ESTO
Responder Con Cita
  #11  
Antiguo 31-12-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por AzidRain
Para los casos en los que el usuario pierde u olvida su contraseña lo normal es "resetearla" asignándole una contraseña por default que obviamente el usuario tiene que cambiar en cuanto se loguea por primera vez al sistema.
Hombre, se puede echar una mano al usuario. Es decir, se puede generar una contraseña aleatoria, con cierta "fuerza", de modo que el usuario pueda cambiarla, si lo desea, pero, no obligatoriamente, como sería el caso de asignarle una contraseña predeterminada más o menos conocida. Vamos, yo es lo que hago y he visto hacer.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #12  
Antiguo 04-01-2008
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Cita:
Empezado por dec Ver Mensaje
Hola,
Es decir, se puede generar una contraseña aleatoria, con cierta "fuerza", de modo que el usuario pueda cambiarla, si lo desea, pero, no obligatoriamente, como sería el caso de asignarle una contraseña predeterminada más o menos conocida. Vamos, yo es lo que hago y he visto hacer.
El problema es que si le generas algo como "AD3&%IJZ99" ten por seguro que la olvidan o no la escriben bien cuando se la pasas. Yo a veces hago eso pero al primer login con esa clave inmediatamente pido que la cambie de lo contrario no tiene acceso. El problema con las contraseñas "normales" en donde le pones nuevamente una contraseña conocida es que muchos usuarios las dejan como están y no las cambian. En una empresa donde trabajaba hace algunos años (el monstruo de los supermercados gringos) erá clásico que el superusario (manager) siempre tenia la contraseña por default ya que el gerente nunca se tomaba el tiempo de cambiarla.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Gestionar un Proyecto por varias personas belpab Varios 33 16-09-2008 15:39:09
Como gestionar un proyecto Aprendiendo Varios 1 30-06-2007 00:28:14
Gestionar excepciones Angel.Matilla C++ Builder 0 29-01-2007 13:41:54
gestionar WM_MOUSEWHEEL en Scrollbox Critter Varios 0 30-10-2006 19:53:00
Gestionar Base de Datos tarco35 Conexión con bases de datos 1 22-11-2003 15:55:33


La franja horaria es GMT +2. Ahora son las 07:42:34.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi