Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 31-01-2011
jehemo jehemo is offline
Miembro
 
Registrado: jul 2006
Posts: 15
Poder: 0
jehemo Va por buen camino
Ayuda con aes_decrypt mysql

Estoy generando una aplicacion en delphi 2009 con mysql y la contraseña la encripto con AES_ENCRYPT(valor, 'llave') la escritura la realizo sin ningun problema pero al momento de realizar la consulta para poder visualizar el dato con aes_decrypt y visualizar el dato con query.fielbyname().asstring recibo el dato encriptado. Alguien sabe como puedo resolver este problema?
Responder Con Cita
  #2  
Antiguo 31-01-2011
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Lightbulb

Mira Aquí.
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #3  
Antiguo 31-01-2011
jehemo jehemo is offline
Miembro
 
Registrado: jul 2006
Posts: 15
Poder: 0
jehemo Va por buen camino
Creo que no me explique bien, si realizo la consulta directamente en mysql si veo el dato sin encriptar el problema es dentro de delphi se queda con el valor encriptado aunque llame la funcion de desencriptar
Responder Con Cita
  #4  
Antiguo 31-01-2011
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

Bueno...siempre es bueno explicarse bien desde el principio para que te podamos ayudar mejor, he ir directamente al grano sin dar vueltas.
Como veo que eres nuevo por aquí te doy la Bienvenida y recomiendo leer nuestra Guía de estilo y las Etiquetas(tag) disponibles para conocer ciertas reglas de nuestro foro y tener un buen formato en los post del foro.
Sobre tu problema... creo que poniendo algun código ejemplo puede ayudar a que podamos ayudarte.
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7

Última edición por rgstuamigo fecha: 31-01-2011 a las 20:18:44.
Responder Con Cita
  #5  
Antiguo 31-01-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿Por qué no pones algo del código que usas para que podamos entender mejor?

// Saludos
Responder Con Cita
  #6  
Antiguo 31-01-2011
jehemo jehemo is offline
Miembro
 
Registrado: jul 2006
Posts: 15
Poder: 0
jehemo Va por buen camino
Aqui esta la consulta que realizo para obtener mis datos:

consulta:= 'select u.usuario, (aes_decrypt(u.clave,' + '''' + '1234' + '''' + ')) as psw, u.desc_usuario,' + 'p.agregar_zonas, p.modificar_zonas, p.consultar_zonas,' + 'p.agregar_cobr, p.modificar_cobr, p.consultar_cobr,' + 'p.capturar_entregas, p.modificar_entregas, p.validar_entregas,' + 'p.agregar_usuarios, p.modificar_usuarios, p.consultar_usuarios,' + 'p.consultar_entregas from usuarios as u ' + 'inner join permisos as p on u.usuario = p.usuario ' +'where u.usuario =' + '''' + nombre +'''';

y lo mando a llamar de la siguiente manera:

form1.Edit1.Text:= QModificaUsuario.FieldByName('psw').AsString;

y el valor que me asigna es el valor encriptado
Responder Con Cita
  #7  
Antiguo 31-01-2011
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

Mira ésta consulta SQL que pongo que te puede orientar:
Código SQL [-]
Select AES_DECRYPT(AES_ENCRYPT('Hola', 'llave'),'llave');
Si te das cuenta en la parte interna estoy cifrando la palabra 'Hola' con una llave de nombre 'llave' luego al resultado de ese cifrado nuevamente los descifro con la misma llave, lo cual debería tener como resultado final la misma palabra 'Hola'
Espero se entienda....
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7

Última edición por rgstuamigo fecha: 31-01-2011 a las 20:46:51.
Responder Con Cita
  #8  
Antiguo 31-01-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Es posible que al compañero le haya pasado lo mismo que a mi cuando probé las funciones Pero es que, viendo el ejemplo del manual de MySQL:

Código:
SELECT @password:='my password';
INSERT INTO t VALUES (1,AES_ENCRYPT('text',@password));
da la impresión que la cadena a encriptar es el segundo parámetro en lugar del primero como bien pone rgstuamigo.

// Saludos
Responder Con Cita
  #9  
Antiguo 31-01-2011
jehemo jehemo is offline
Miembro
 
Registrado: jul 2006
Posts: 15
Poder: 0
jehemo Va por buen camino
Ya intente con la consulta que me das y el resultado que obtengo es el mismo solo mis datos cifrados
Responder Con Cita
  #10  
Antiguo 31-01-2011
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

La consulta que te he dado es solo un ejemplo aclaratorio e ilustrativo para poder conocer como encriptar y descencriptar valores en MySQL usando la funciones AES_DECRYPT y AES_ENCRYPT respectivamente.
De todas formas te voy a poner un ejemplo basado en que tu tabla "usuarios"en el campo "clave" ya se tiene encriptado y guardado la clave de usuario y queremos obtenerlo desencriptada.
Segun tengo entendido que tu llave con la que has encriptado y guardado la columna 'clave'de tu tabla Usuarios es '1234'
Entonces....
Código SQL [-]
 Select AES_ENCRYPT(u.clave, '1234') from usuarios u;
Debería darte como resultado todas las claves de tu tabla Usuario desencriptada.
Prueba esa consulta y nos avisas como te fué...
PD. Mejor si lo pruebas en con algun programa diferente de Delphi que sirva para hacerles consultas SQL directamente al Servidor MySQL
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #11  
Antiguo 31-01-2011
jehemo jehemo is offline
Miembro
 
Registrado: jul 2006
Posts: 15
Poder: 0
jehemo Va por buen camino
la consulta ya la he probado en mysql directamente y funciona a la perfeccion el problema es q cuando la mando a un edit en delphi de esta manera query1.FieldByName('psw').AsString me muestra el dato encriptado
Responder Con Cita
  #12  
Antiguo 31-01-2011
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

Si todo lo tienes bien, pues entonces debería funcionarte todo bien humm... me late que algo estás haciendo mal... de todas formas el manual de MySQL dice que:
Cita:
Extraido de el manual MySQL>
Cita:
Si quiere almacenar resultados de una función de encriptación que puede contaner valores arbitrarios de bytes, use una columna BLOB en lugar de CHAR o VARCHAR para evitar problemas potenciales con eliminación de espacios finales que pueden cambiar los valores de datos.
Saludos....
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #13  
Antiguo 31-01-2011
jehemo jehemo is offline
Miembro
 
Registrado: jul 2006
Posts: 15
Poder: 0
jehemo Va por buen camino
aqui esta todo el codidgo de mi formulario haber si me pueden ayudar la parte en rojo es donde tengo el problema
Código Delphi [-]
unit UModificaUsuarios;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DB, DBCtrls, ADODB;

type
  TFModificaUsuarios = class(TForm)
    QUsuarios: TADOQuery;
    QUsuariosusuario: TStringField;
    BModificar: TButton;
    BConsultar: TButton;
    BSalir: TButton;
    BBorrar: TButton;
    EUsuario: TEdit;
    LUsuarios: TListBox;
    Label1: TLabel;
    QModificaUsuario: TADOQuery;
    procedure FormCreate(Sender: TObject);
    procedure EUsuarioChange(Sender: TObject);
    procedure LUsuariosClick(Sender: TObject);
    procedure BModificarClick(Sender: TObject);
    procedure BConsultarClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure BSalirClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FModificaUsuarios: TFModificaUsuarios;

implementation

uses Uusuarios;
{$R *.dfm}

procedure TFModificaUsuarios.BConsultarClick(Sender: TObject);
var
    consulta, nombre, pasword: String;
    fusuarios: TFUsuarios;
    permiso1, permiso2, permiso3, permiso4, permiso5, permiso6, permiso7: integer;
    permiso8, permiso9, permiso10, permiso11, permiso12, permiso13: integer;
begin
    nombre:= lusuarios.Items[lusuarios.ItemIndex];
    consulta:= 'select u.usuario,(aes_decrypt(AES_ENCRYPT(u.clave,';
    consulta:= consulta + '''' + 'TWH664' + '''' + '), ' + '''';
    consulta:= consulta + 'TWH664' + '''' + ')) as psw, u.desc_usuario,';
    consulta:= consulta + 'p.agregar_zonas, p.modificar_zonas, p.consultar_zonas,';
    consulta:= consulta + 'p.agregar_cobr, p.modificar_cobr, p.consultar_cobr,';
    consulta:= consulta + 'p.capturar_entregas, p.modificar_entregas, p.validar_entregas,';
    consulta:= consulta + 'p.agregar_usuarios, p.modificar_usuarios, p.consultar_usuarios,';
    consulta:= consulta + 'p.consultar_entregas from usuarios as u ';
    consulta:= consulta + 'inner join permisos as p on u.usuario = p.usuario ';
    consulta:= consulta +'where u.usuario =' + '''' + nombre +'''';
    qmodificausuario.SQL.Clear;
    QModificaUsuario.SQL.Text:= consulta;
    QmodificaUsuario.Active:= true;
    qmodificausuario.Open;
    showmessage(qmodificausuario.fieldvalues['psw']); //esta linea la utilizo para ver el valor de clave
    pasword:= qmodificausuario.FieldByName('psw').AsString;
    permiso1:= StrtoInt(QModificaUsuario.FieldByName('agregar_zonas').AsString);
    permiso2:= StrtoInt(QModificaUsuario.FieldByName('modificar_zonas').AsString);
    permiso3:= StrtoInt(QModificaUsuario.FieldByName('consultar_zonas').AsString);
    permiso4:= StrtoInt(QModificaUsuario.FieldByName('agregar_cobr').AsString);
    permiso5:= StrtoInt(QModificaUsuario.FieldByName('modificar_cobr').AsString);
    permiso6:= StrtoInt(QModificaUsuario.FieldByName('consultar_cobr').AsString);
    permiso7:= StrtoInt(QModificaUsuario.FieldByName('capturar_entregas').AsString);
    permiso8:= StrtoInt(QModificaUsuario.FieldByName('modificar_entregas').AsString);
    permiso9:= StrtoInt(QModificaUsuario.FieldByName('validar_entregas').AsString);
    permiso10:= StrtoInt(QModificaUsuario.FieldByName('agregar_usuarios').AsString);
    permiso11:= StrtoInt(QModificaUsuario.FieldByName('modificar_usuarios').AsString);
    permiso12:= StrtoInt(QModificaUsuario.FieldByName('consultar_usuarios').AsString);
    permiso13:= StrtoInt(QModificaUsuario.FieldByName('consultar_entregas').AsString);
    fusuarios:= tfusuarios.Create(Application);
    fusuarios.BCancelar.SetFocus;
    fusuarios.ENombre.Text:= lusuarios.Items[lusuarios.ItemIndex];
    fusuarios.EPassword.Text:= QModificaUsuario.FieldByName('psw').AsString;
    fusuarios.ERepitePassword.Text:= QModificaUsuario.FieldByName('psw').AsString;
    fusuarios.EDescripcion.Text:= QModificaUsuario.FieldByName('desc_usuario').AsString;
    if permiso1 = 1 then
        fusuarios.CheckAgregaZona.Checked:= true
    else
      fusuarios.CheckAgregaZona.Checked:= false;
    if permiso2 = 1 then
      fusuarios.CheckModificaZona.Checked:= true
    else
      fusuarios.CheckModificaZona.Checked:= false;
    if permiso3 = 1 then
      fusuarios.CheckConsultaZona.Checked:= true
    else
      fusuarios.CheckConsultaZona.Checked:= false;
    if permiso4 = 1 then
      fusuarios.CheckAgregaCobrador.Checked:= true
    else
      fusuarios.CheckAgregaCobrador.Checked:= false;
    if permiso5 = 1 then
      fusuarios.CheckModificaCobrador.Checked:= true
    else
      fusuarios.CheckModificaCobrador.Checked:= false;
    if permiso6 = 1 then
      fusuarios.CheckConsultaCobrador.Checked:= true
    else
      fusuarios.CheckConsultaCobrador.Checked:= false;
    if permiso7 = 1 then
      fusuarios.CheckCapturaEntrega.Checked:= true
    else
      fusuarios.CheckCapturaEntrega.Checked:= false;
    if permiso8 = 1 then
      fusuarios.CheckModificaEntrega.Checked:= true
    else
      fusuarios.CheckModificaEntrega.Checked:= false;
    if permiso9 =1 then
      fusuarios.CheckValidaEntrega.Checked:= true
    else
      fusuarios.CheckValidaEntrega.Checked:= false;
    if permiso10=1 then
      fusuarios.CheckAgregaUsuario.Checked:= true
    else
      fusuarios.CheckAgregaUsuario.Checked:= false;
    if permiso11= 1 then
      fusuarios.CheckModificaUsuario.Checked:= true
    else
      fusuarios.CheckModificaUsuario.Checked:= false;
    if permiso12 = 1 then
      fusuarios.CheckConsultarUsuario.Checked:= true
    else
      fusuarios.CheckConsultarUsuario.Checked:= false;
    if permiso13=1 then
      fusuarios.CheckConsultarEntrega.Checked:= true
    else
      fusuarios.CheckConsultarEntrega.Checked:= false;

    fusuarios.ENombre.Enabled:= false;
    fusuarios.EPassword.Enabled:= false;
    fusuarios.ERepitePassword.Enabled:= false;
    fusuarios.EDescripcion.Enabled:= false;
    fusuarios.CheckAgregaZona.Enabled:= false;
    fusuarios.CheckModificaZona.Enabled:= false;
    fusuarios.CheckConsultaZona.Enabled:= false;
    fusuarios.CheckAgregaCobrador.Enabled:= false;
    fusuarios.CheckModificaCobrador.Enabled:= false;
    fusuarios.CheckConsultaCobrador.Enabled:= false;
    fusuarios.CheckCapturaEntrega.Enabled:= false;
    fusuarios.CheckModificaEntrega.Enabled:= false;
    fusuarios.CheckValidaEntrega.Enabled:= false;
    fusuarios.CheckConsultarEntrega.Enabled:= false;
    fusuarios.CheckAgregaUsuario.Enabled:=false;
    fusuarios.CheckModificaUsuario.Enabled:= false;
    fusuarios.CheckConsultarUsuario.Enabled:= false;
    fusuarios.BAceptar.Enabled:= false;
    fusuarios.BAceptar.Visible:= false;
    fusuarios.Show();
end;

procedure TFModificaUsuarios.BModificarClick(Sender: TObject);
var
    Fusuarios: TFusuarios;
begin
      fusuarios:= tfusuarios.Create(Application);
      fusuarios.EPassword.SetFocus;
      fusuarios.ENombre.Enabled:= false;
      Fusuarios.ENombre.Text:= lusuarios.Items[lusuarios.ItemIndex];
      fusuarios.Show();
end;

procedure TFModificaUsuarios.BSalirClick(Sender: TObject);
begin
      close();
end;

procedure TFModificaUsuarios.EUsuarioChange(Sender: TObject);
var
    texto, item: String;
    i: integer;
begin // selecciona el item mas proximo al que se escribe
    texto:= AnsiUpperCase(EUsuario.Text);
    for i := 0 to lusuarios.Count - 1 do
    begin
          item:= AnsiUpperCase(Lusuarios.Items[i]);
          if Pos(texto, item) = 1 then
          begin
              lusuarios.ItemIndex:= i;
              Bmodificar.Enabled:= true;
              Bborrar.Enabled:= true;
              Bconsultar.Enabled:= true;
          end;
    end;
    if eusuario.text = '' then
    begin
        lusuarios.ItemIndex:= -1;
        bmodificar.Enabled:= false;
        bconsultar.Enabled:= false;
        bborrar.Enabled:= false;
    end;

end;

procedure TFModificaUsuarios.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
    release();
end;

procedure TFModificaUsuarios.FormCreate(Sender: TObject);
begin
      qusuarios.Active:= true;
      qusuarios.Open;
      lusuarios.Items.Clear;      //se limpia el list box
      qusuarios.First;            // se va al primer registro
      while not qusuarios.Eof do  // se añaden los campos al list box
      begin
            lusuarios.Items.Add(AnsiUpperCase(qusuarios.FieldByName('usuario').AsString));
            qusuarios.Next;
      end;
      qusuarios.Close;
      qusuarios.Active:= false;
end;

procedure TFModificaUsuarios.LUsuariosClick(Sender: TObject);
begin
      if lusuarios.ItemIndex <> -1 then
      begin
          Bmodificar.Enabled:= true;
          Bborrar.Enabled:= true;
          Bconsultar.Enabled:= true;
          EUsuario.Text:= lusuarios.Items[lusuarios.ItemIndex]; // se agrega el item al edit
       end;

end;

end.

Última edición por rgstuamigo fecha: 31-01-2011 a las 22:02:31. Razón: Estética en el código
Responder Con Cita
  #14  
Antiguo 31-01-2011
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
No haberlo puesto antes...

Si desde el principio hubieras puesto tú código creo que ya hubieramos solucionado el problema..

He modificado tu anterior código el procedure BConsultarClick

Código Delphi [-]
...
procedure TFModificaUsuarios.BConsultarClick(Sender: TObject);
var
    consulta, nombre, pasword: String;
    fusuarios: TFUsuarios;
    permiso1, permiso2, permiso3, permiso4, permiso5, permiso6, permiso7: integer;
    permiso8, permiso9, permiso10, permiso11, permiso12, permiso13: integer;
begin
    nombre:= lusuarios.Items[lusuarios.ItemIndex];
 with QModificaUsuario do
    begin
       SQL.Clear;//Limpio la SQL que tenía
       SQL.Add('Select u.usuario,AES_DECRYPT(u.clave,''TWH664'') as psw,');
       SQL.Add('u.desc_usuario,p.agregar_zonas, p.modificar_zonas, p.consultar_zonas,');
       SQL.Add('p.agregar_cobr, p.modificar_cobr, p.consultar_cobr,');
       SQL.Add('p.capturar_entregas, p.modificar_entregas, p.validar_entregas,');
       SQL.Add('p.agregar_usuarios, p.modificar_usuarios, p.consultar_usuarios,p.consultar_entregas');
       SQL.Add('From usuarios u Inner Join permisos p on u.usuario = p.usuario');
       SQL.Add('Where u.usuario=:MI_PARAMETRO_1;');//Estoy creando un parametro
       ParamByName('MI_PARAMETRO_1').AsString:=nombre;//asigno un valor al parámetro  MI_PARAMETRO_1
      //QmodificaUsuario.Active:= true; <-- Esta instrución está por demás hace lo mismo que la instruccion de abajo
       qmodificausuario.Open;
     end;
showmessage(qmodificausuario.fieldvalues['psw']);//esta linea la utilizo para ver el valor de clave
pasword:= qmodificausuario.FieldByName('psw').AsString;
...
...
...
Dada la modificacion algunas variables estan por demás...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7

Última edición por rgstuamigo fecha: 31-01-2011 a las 22:37:30.
Responder Con Cita
  #15  
Antiguo 01-02-2011
jehemo jehemo is offline
Miembro
 
Registrado: jul 2006
Posts: 15
Poder: 0
jehemo Va por buen camino
Unhappy

sigo teniendo el mismo problema el valor que recibo sigue encriptado despues de hacer las modififcaciones que me diste
Responder Con Cita
  #16  
Antiguo 06-06-2017
foxito foxito is offline
Miembro
 
Registrado: abr 2008
Ubicación: Orizaba, Ver
Posts: 32
Poder: 0
foxito Va por buen camino
Cita:
Empezado por jehemo Ver Mensaje
sigo teniendo el mismo problema el valor que recibo sigue encriptado despues de hacer las modififcaciones que me diste
Hola resolviste tu problema, aunque ya ha pasado mucho tiempo. En este momento tuve el mismo problema. Si fuera si como lo resolvistes?

Gracias.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
ayuda con mysql en kubuntu Robert01 MySQL 1 22-12-2008 12:03:47
MySQL Gratis AYUDA!! cmm07 Varios 8 11-06-2008 15:30:02
Ayuda con MySQL pelaorb68 SQL 4 16-03-2007 23:32:47
ayuda mysql server tato Varios 2 14-12-2005 19:50:45


La franja horaria es GMT +2. Ahora son las 22:40:49.


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