Crypter Data Paradox Table

Signaler
Messages postés
46
Date d'inscription
jeudi 6 novembre 2003
Statut
Membre
Dernière intervention
16 août 2007
-
Messages postés
46
Date d'inscription
jeudi 6 novembre 2003
Statut
Membre
Dernière intervention
16 août 2007
-
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

DBEdit1.Text := Encode(DBEdit1.Text, SecurityString);
DBEdit2.Text := Encode(DBEdit2.Text, SecurityString);

Users.Post;

DBEdit1.Text := Decode(DBEdit1.Text, SecurityString);

DBEdit2.Text := Decode(DBEdit2.Text, SecurityString);
end;

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.

Merci de m'aider !!

62 réponses

Messages postés
436
Date d'inscription
vendredi 7 novembre 2003
Statut
Membre
Dernière intervention
8 octobre 2008
5
Bonjour,
Dans le DBGRid sur l'événement qui redessine les cellules ou colonnes (je ne me souviens plus) tu réecris en décodant. ...

Dom
Messages postés
46
Date d'inscription
jeudi 6 novembre 2003
Statut
Membre
Dernière intervention
16 août 2007

ok ... je m'en doutais masi c'est justemetn ca que je cherche .. l'événement ou je dois decoder et comment decode les cellule une par une ?
Messages postés
46
Date d'inscription
jeudi 6 novembre 2003
Statut
Membre
Dernière intervention
16 août 2007

ben en fait, l'evenement jle connais :

DrawColumnCell

voici le code que j'ai a l'interieur presentement :

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);

var dataset:Tdataset;

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;
Messages postés
436
Date d'inscription
vendredi 7 novembre 2003
Statut
Membre
Dernière intervention
8 octobre 2008
5
Ben voilà , c'est ici en faisant un textout ...

Dom
Messages postés
46
Date d'inscription
jeudi 6 novembre 2003
Statut
Membre
Dernière intervention
16 août 2007

je suis assez débutant en programmation ... pourrais-tu m'éclaire encore :P un textout jme doute c'est quoi masi commetn on fais ca exactement ?

Désolé d'être poche comme ca :(
Messages postés
436
Date d'inscription
vendredi 7 novembre 2003
Statut
Membre
Dernière intervention
8 octobre 2008
5
ici http://www.developpez.com/delphi/faq/?page=composbdd
tu trouveras ton bonheur ...

Dom
Messages postés
46
Date d'inscription
jeudi 6 novembre 2003
Statut
Membre
Dernière intervention
16 août 2007

bon, et bien je crois que je vais seulement mettre un mot de passe . .ca va etre plus simple .. j'arrive a rien !!
Messages postés
436
Date d'inscription
vendredi 7 novembre 2003
Statut
Membre
Dernière intervention
8 octobre 2008
5
procedure
TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var dataset:Tdataset;

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);
TextOut(Rect.Left, Rect.Top, Decode(DBGrid1.Fields[DataCol].Text));
end;
end;








Dom
Messages postés
46
Date d'inscription
jeudi 6 novembre 2003
Statut
Membre
Dernière intervention
16 août 2007

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;
Messages postés
46
Date d'inscription
jeudi 6 novembre 2003
Statut
Membre
Dernière intervention
16 août 2007

Ca ne fonctionne pas plus meme si je met la "bonne" commande

TextOut(Rect.Left, Rect.Top, DecodePWDEx(DBGrid1.Fields[DataCol].Text, SecurityPass));
Messages postés
436
Date d'inscription
vendredi 7 novembre 2003
Statut
Membre
Dernière intervention
8 octobre 2008
5
TextOut(Rect.Left, Rect.Top, Decode(DBGrid1.Fields[DataCol].Text,securitystring));





Dom
Messages postés
436
Date d'inscription
vendredi 7 novembre 2003
Statut
Membre
Dernière intervention
8 octobre 2008
5
Essaie
TextOut(Rect.left,Rect.top,'TOTO')

Si ca compile, et que quand tu le lances t'as Toto dans ta grille c'est que c'est ton decode qui merdoie

Dom
Messages postés
46
Date d'inscription
jeudi 6 novembre 2003
Statut
Membre
Dernière intervention
16 août 2007

Ca ne fonctionne pas .. toujours la meme erreur !
Messages postés
436
Date d'inscription
vendredi 7 novembre 2003
Statut
Membre
Dernière intervention
8 octobre 2008
5
dbgrid.canvas.textout ...

Dom
Messages postés
46
Date d'inscription
jeudi 6 novembre 2003
Statut
Membre
Dernière intervention
16 août 2007

ouin .. jviens de comprendre ce que tu voulais faire avec ton textout .. ca donne un résultat assez bizzare !

Il y a le texte encrypté en dessous et sur le dessus tu vois les data decodées ...
Messages postés
46
Date d'inscription
jeudi 6 novembre 2003
Statut
Membre
Dernière intervention
16 août 2007

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?
Messages postés
436
Date d'inscription
vendredi 7 novembre 2003
Statut
Membre
Dernière intervention
8 octobre 2008
5
Il faut que tu travaille dessus comme ça , c'est l'idée .... cherche avec google avec ces fonstions pour trouver des exemples ...

Dom
Messages postés
46
Date d'inscription
jeudi 6 novembre 2003
Statut
Membre
Dernière intervention
16 août 2007

Merci beaucoup DOM .... mais je crois que je vais chercher pour une autre solution !

Mais .. merci pour la piste :)
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
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/
Messages postés
436
Date d'inscription
vendredi 7 novembre 2003
Statut
Membre
Dernière intervention
8 octobre 2008
5
C'est où OnGetText ?
Quel Delphi ?
En Delphi 7 Entreprise, je ne l'ai pas (ou je ne sais pas l'utiliser)

Dom