tomz24
Messages postés46Date d'inscriptionjeudi 6 novembre 2003StatutMembreDernière intervention16 août 2007
-
21 juin 2007 à 15:38
tomz24
Messages postés46Date d'inscriptionjeudi 6 novembre 2003StatutMembreDernière intervention16 août 2007
-
16 août 2007 à 21:01
Bonjour à vous,
Je suis entrain de créer ma première application avec une BD Paradox.
J'ai trouvé un algorithme pour encrypter les data que j'envoie dedans. J'explique comment je procède :
Premièrement, voici ce que j'utilise
J'utilise une Base de Données Paradox nommé Users.DB
Un DBGrid pour l'affiche de certaines informations de ma BD.
Des Champs DBEdit pour modifier ou entrer des informations dans la BD.
Donc voici comment j'encrypte : Je rempli les champs et ensuite j'appuie sur Sauvegarder.
Voici le code j'ai seulement garder l'essentiel pour vous faciliter la tache !:
procedure TForm1.Image3Click(Sender: TObject);
begin
N.B.: Encode, Decode (Ce sont des fonctions que j'ai créé pour le cryptage)
function Decode(Data, SecurityString: string)
Cependant, il y a un petit problème. Comme les données entrent maintenant Crypté dans la BD, dans la DBGrid, les données sont aussi cryptés donc dans mon DBGrid je ne vois que des ZnHksdlK/nsJkL (exemple :P) Donc ma question, comment je fais pour Decrypter mes données de ma BD avant que la DBGrid chargent les informations de la BD ?
Il est important que la BD soit toujours Crypté, meme pendant l'execution du programme.
begin
dataset:= (Sender as TDBGrid).DataSource.DataSet;
with AlternGrid(Sender) do
begin
if (DataSet.RecNo mod 2 = 1 ) then
Canvas.Brush.Color := $00E6D9C4//$00EBFEFB
else
Canvas.Brush.Color := $00EAF7FF;// $00E7ECCA
if DataLink.ActiveRecord = Row -1 then
begin
Canvas.Font.Color:=clwhite ;
Canvas.Brush.Color:=clblack;
end; end ;
DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column, State);
end;
begin
dataset:= (Sender as TDBGrid).DataSource.DataSet;
with AlternGrid(Sender) do
begin
if (DataSet.RecNo mod 2 = 1 ) then
Canvas.Brush.Color := $00E6D9C4//$00EBFEFB
else
Canvas.Brush.Color := $00EAF7FF;// $00E7ECCA
if DataLink.ActiveRecord = Row -1 then
begin
Canvas.Font.Color:=clwhite ;
Canvas.Brush.Color:=clblack;
end; end ;
tomz24
Messages postés46Date d'inscriptionjeudi 6 novembre 2003StatutMembreDernière intervention16 août 2007 21 juin 2007 à 17:22
ca ne fonctionne pas ...
[Error] Unit1.pas(412): Incompatible types: 'Integer' and 'String'
[Fatal Error] UsersInfo.dpr(6): Could not compile used unit 'Unit1.pas'
Ligne 412 : TextOut(Rect.Left, Rect.Top, Decode(DBGrid1.Fields[DataCol].Text));
Voici ma fonctione Decode :
function Decode(Data, SecurityString: string): string;
var
i, x, x2: integer;
s1, s2, ss: string;
begin
Result := #1;
if Length(SecurityString) < 16 then Exit;
for i := 1 to Length(SecurityString) do
begin
s1 := Copy(SecurityString, i + 1,Length(securitystring));
if Pos(SecurityString[i], s1) > 0 then Exit;
if Pos(SecurityString[i], Codes64) <= 0 then Exit;
end;
s1 := Codes64;
s2 := '';
ss := securitystring;
for i := 1 to Length(Data) do if Pos(Data[i], ss) > 0 then s2 := s2 + Data[i];
Data := s2;
s2 := '';
if Length(Data) mod 2 <> 0 then Exit;
for i := 0 to Length(Data) div 2 - 1 do
begin
x := Pos(Data[i * 2 + 1], ss) - 1;
if x < 0 then Exit;
ss := Copy(ss, Length(ss), 1) + Copy(ss, 1,Length(ss) - 1);
x2 := Pos(Data[i * 2 + 2], ss) - 1;
if x2 < 0 then Exit;
x := x + x2 * 16;
s2 := s2 + chr(x);
ss := Copy(ss, Length(ss), 1) + Copy(ss, 1,Length(ss) - 1);
end;
Result := s2;
end;
tomz24
Messages postés46Date d'inscriptionjeudi 6 novembre 2003StatutMembreDernière intervention16 août 2007 21 juin 2007 à 17:56
yas pas moyen de decopder les Data AVANT que le DBGrid load les datas de la BD ? et a chaque refresh de la BD normalement le DBGrid se met a jour ... yas-tu moyen qu'en se mettant a jour, qu'il decode les data avant?
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 23 juin 2007 à 23:41
Et en utilisant l'évènement OnGetText du composant champ d'un TTable ou d'un TQuery, ce ne serait pas plus simple ?
procedure TForm1.Table1NotesGetText(Sender: TField; var Text: String;
DisplayText: Boolean);
begin
if DisplayText then
Text := Decode(Text, SecurityString);
end;
De cette façon, dès qu'il s'agit d'afficher la valeur et ce quel que soit le composant d'affichage utilisé, la valeur affichée apparaitra toujours décodée.
Pour ce qui est de mettre un mot de passe sur une table Paradox, alors là je rigole :
qui ne connait pas les mots de passe génériques qui permettent d'ouvrir n'importe quelle table Paradox...
May Delphi be with you !
<hr color="#008000" />
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
http://www.afipa.net/