Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   desencriptar datos y mostrar en DBGrid (https://www.clubdelphi.com/foros/showthread.php?t=85021)

camiz 14-01-2014 22:20:46

desencriptar datos y mostrar en DBGrid
 
hola amigos del foro tengo una consulta.

estoy trabajando en una aplicacion el cual toda la informacion que guardo a la base de datos esta encriptada.
ahora quiero mostrarla en un DBGrid normalmente la informacion se muestra encriptada en el DBGrid, ahora como hago para desencriptar esa informacion y mostrarla en el dbgrid.

algunos ejemplos el cual sea yo me encargo de adaptarlo a mi proyecto, sería muy bueno.

ecfisa 14-01-2014 22:54:41

Hola camiz.

Un modo es:
Código Delphi [-]
...
type
  TForm1 = class(TForm)
  ...
  private
    procedure FieldGetText(Sender: TField; var Text: String; DisplayText: Boolean);
  ...
  end;
...

implementation

....

procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
begin
  // abrir DataSet, etc, etc...
  with DBGrid1.DataSource.DataSet do
    for i:= 0 to FieldCount-1 do
      Fields[i].OnGetText := FieldGetText;
end;

procedure TForm1.FieldGetText(Sender: TField; var Text: String;
  DisplayText: Boolean);
begin
  Text := Descifrar(Sender.AsString);  // Aquí va tu función de descifrar
end;

...

procedure TForm1.FormDestroy(Sender: TObject);
var
  i: Integer;
begin
   with DBGrid1.DataSource.DataSet do
     for i:= 0 to FieldCount-1 do
       Fields[i].OnGetText := nil
end;

Saludos :)

Casimiro Noteví 14-01-2014 22:55:00

Y si la información está cifrada, ¿cómo la usas? :confused:
Quiero decir, ejemplo:
Código SQL [-]
select codigo, nombre from tbClientes where nombre containing 'z'

camiz 15-01-2014 15:18:31

estoy tratando de usar el codigo de ecfisa, pero algo no esta funcionando les dejo el codigo que estoy usando para guardar los datos a la base de datos.

estoy usando la libreria Crypto y trabajo con los componentes DCP_rijndael y DCP_sha512 la funcion para encriptar es esta

Código Delphi [-]
function Cifrar(Texto, Clave: AnsiString): String;
var
  Cipher: TDCP_Rijndael;
begin
  Cipher:= TDCP_Rijndael.Create(nil);
  Cipher.InitStr(Clave,TDCP_sha512);
  result := Cipher.EncryptString(Texto);
  Cipher.Burn;
  Cipher.Free;
end;



y para guardar a la base de datos


Código Delphi [-]
        Open;
        Insert;
        FieldByName('CAM1PO').AsString := Cifrar(txtcodigo.Text,'123456');
        FieldByName('CAM2PO').AsString := Cifrar(txtvencimiento.Text,'123456');
        FieldByName('CAM3PO').AsString := Cifrar(txtafiliado.Text,'123456');
        Post



los datos se encriptan y se guardan correctamente ahora el problema al mostralos en un dbgrid se muestran tal como se han guardado. lo que quiero es mostrarlo descencriptado en el DBGrid.
esta es la funcion para desencriptar.


Código Delphi [-]
function Descifrar(Texto, Clave: AnsiString): String;
var
  Cipher: TDCP_Rijndael;
begin
  Cipher:= TDCP_Rijndael.Create(nil);
  Cipher.InitStr(Clave,TDCP_sha512);
  result := Cipher.DecryptString(Texto);
  Cipher.Burn;
  Cipher.Free;
end;

ecfisa 15-01-2014 19:40:01

1 Archivos Adjunto(s)
Hola camiz.

Indudablemente el problema esta en los métodos de cifrado o en la aplicación que haces de ellos. Te adjunto un código que usa un cifrado trivial (ya que eso no hace al funcionamiento del algorítmo) para que puedas verificarlo.

El arhivo incluye una tabla con algunos datos cifrados, así que solo crea una carpeta y descomprimí el adjunto allí para poder probarlo.

Saludos :)


La franja horaria es GMT +2. Ahora son las 01:39:31.

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