PDA

Ver la Versión Completa : desencriptar datos y mostrar en DBGrid


camiz
14-01-2014, 22:20:46
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:

...
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 Notevi
14-01-2014, 22:55:00
Y si la información está cifrada, ¿cómo la usas? :confused:
Quiero decir, ejemplo: 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

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


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.


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