Crypter Data Paradox Table

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

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

dominique.stock Messages postés 436 Date d'inscription vendredi 7 novembre 2003 Statut Membre Dernière intervention 8 octobre 2008 7
21 juin 2007 à 15:55
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
0
tomz24 Messages postés 46 Date d'inscription jeudi 6 novembre 2003 Statut Membre Dernière intervention 16 août 2007
21 juin 2007 à 16:02
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 ?
0
tomz24 Messages postés 46 Date d'inscription jeudi 6 novembre 2003 Statut Membre Dernière intervention 16 août 2007
21 juin 2007 à 16:04
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;
0
dominique.stock Messages postés 436 Date d'inscription vendredi 7 novembre 2003 Statut Membre Dernière intervention 8 octobre 2008 7
21 juin 2007 à 16:07
Ben voilà , c'est ici en faisant un textout ...

Dom
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
tomz24 Messages postés 46 Date d'inscription jeudi 6 novembre 2003 Statut Membre Dernière intervention 16 août 2007
21 juin 2007 à 16:08
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 :(
0
dominique.stock Messages postés 436 Date d'inscription vendredi 7 novembre 2003 Statut Membre Dernière intervention 8 octobre 2008 7
21 juin 2007 à 16:12
ici http://www.developpez.com/delphi/faq/?page=composbdd
tu trouveras ton bonheur ...

Dom
0
tomz24 Messages postés 46 Date d'inscription jeudi 6 novembre 2003 Statut Membre Dernière intervention 16 août 2007
21 juin 2007 à 17:06
bon, et bien je crois que je vais seulement mettre un mot de passe . .ca va etre plus simple .. j'arrive a rien !!
0
dominique.stock Messages postés 436 Date d'inscription vendredi 7 novembre 2003 Statut Membre Dernière intervention 8 octobre 2008 7
21 juin 2007 à 17:10
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
0
tomz24 Messages postés 46 Date d'inscription jeudi 6 novembre 2003 Statut Membre Dernière intervention 16 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;
0
tomz24 Messages postés 46 Date d'inscription jeudi 6 novembre 2003 Statut Membre Dernière intervention 16 août 2007
21 juin 2007 à 17:23
Ca ne fonctionne pas plus meme si je met la "bonne" commande

TextOut(Rect.Left, Rect.Top, DecodePWDEx(DBGrid1.Fields[DataCol].Text, SecurityPass));
0
dominique.stock Messages postés 436 Date d'inscription vendredi 7 novembre 2003 Statut Membre Dernière intervention 8 octobre 2008 7
21 juin 2007 à 17:24
TextOut(Rect.Left, Rect.Top, Decode(DBGrid1.Fields[DataCol].Text,securitystring));





Dom
0
dominique.stock Messages postés 436 Date d'inscription vendredi 7 novembre 2003 Statut Membre Dernière intervention 8 octobre 2008 7
21 juin 2007 à 17:27
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
0
tomz24 Messages postés 46 Date d'inscription jeudi 6 novembre 2003 Statut Membre Dernière intervention 16 août 2007
21 juin 2007 à 17:30
Ca ne fonctionne pas .. toujours la meme erreur !
0
dominique.stock Messages postés 436 Date d'inscription vendredi 7 novembre 2003 Statut Membre Dernière intervention 8 octobre 2008 7
21 juin 2007 à 17:49
dbgrid.canvas.textout ...

Dom
0
tomz24 Messages postés 46 Date d'inscription jeudi 6 novembre 2003 Statut Membre Dernière intervention 16 août 2007
21 juin 2007 à 17:55
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 ...
0
tomz24 Messages postés 46 Date d'inscription jeudi 6 novembre 2003 Statut Membre Dernière intervention 16 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?
0
dominique.stock Messages postés 436 Date d'inscription vendredi 7 novembre 2003 Statut Membre Dernière intervention 8 octobre 2008 7
21 juin 2007 à 17:57
Il faut que tu travaille dessus comme ça , c'est l'idée .... cherche avec google avec ces fonstions pour trouver des exemples ...

Dom
0
tomz24 Messages postés 46 Date d'inscription jeudi 6 novembre 2003 Statut Membre Dernière intervention 16 août 2007
21 juin 2007 à 18:28
Merci beaucoup DOM .... mais je crois que je vais chercher pour une autre solution !

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

Dom
0
Rejoignez-nous