Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Ayuda con aes_decrypt mysql (https://www.clubdelphi.com/foros/showthread.php?t=72156)

jehemo 31-01-2011 18:43:51

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?

rgstuamigo 31-01-2011 18:49:58

Mira Aquí.;)
Saludos...

jehemo 31-01-2011 19:03:20

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

rgstuamigo 31-01-2011 19:13:34

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...:)

roman 31-01-2011 19:14:19

¿Por qué no pones algo del código que usas para que podamos entender mejor?

// Saludos

jehemo 31-01-2011 19:22:42

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

rgstuamigo 31-01-2011 19:34:10

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...:)

roman 31-01-2011 19:41:09

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

jehemo 31-01-2011 20:07:39

Ya intente con la consulta que me das y el resultado que obtengo es el mismo solo mis datos cifrados

rgstuamigo 31-01-2011 20:32:59

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 ;)

jehemo 31-01-2011 20:39:11

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

rgstuamigo 31-01-2011 20:45:49

Si todo lo tienes bien, pues entonces debería funcionarte todo bien :rolleyes: humm... me late que algo estás haciendo mal...:rolleyes: 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....:)

jehemo 31-01-2011 20:54:52

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.

rgstuamigo 31-01-2011 21:33:40

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...;)

jehemo 31-01-2011 23:09:56

sigo teniendo el mismo problema el valor que recibo sigue encriptado despues de hacer las modififcaciones que me diste

foxito 06-06-2017 13:49:02

Cita:

Empezado por jehemo (Mensaje 389473)
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.:)


La franja horaria es GMT +2. Ahora son las 18:12:30.

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