IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

demande d aide de reprogrammation


Sujet :

Langage Delphi

  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2005
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 57
    Points : 31
    Points
    31
    Par défaut demande d aide de reprogrammation
    bonjour

    j ai le programme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    Function puiss(n1,n2:integer):integer;
    var i,cpt:integer;
    begin
    cpt:=1;
    for i:=1 to n2 do
    begin
    cpt := n1 * cpt;
    end;
    puiss:=cpt;
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    var i,mp:integer;
        ch:string;
    begin
     mp:=0;
     ch:=  Form1.Edit1.Text;
     For i:=  1 to length(ch) do
     begin
       mp := mp + (puiss(2,i) * ord(ch[i])-5);
       showmessage(inttostr(mp));
     end ;
     Form1.Edit2.Text := inttostr(mp);
    end;
     
    end.
    pour crypter le nom dutilistauer
    et je veut l algorithme contraire pour decrypter le nom user pour je puisse l identifier dans mon programme

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 754
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 754
    Points : 13 340
    Points
    13 340
    Par défaut
    C'est indécryptable

  3. #3
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 561
    Points : 3 951
    Points
    3 951
    Par défaut
    Salut

    J'ai quelques remarques sur ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
     Function puiss(n1,n2:integer):integer;
    var i,cpt:integer;
    begin
    cpt:=1;
    for i:=1 to n2 do
    begin
    cpt := n1 * cpt;
    end;
    puiss:=cpt;
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    var i,mp:integer;
        ch:string;
    begin
     mp:=0;
     ch:=  Form1.Edit1.Text;
     For i:=  1 to length(ch) do
     begin
       mp := mp + (puiss(2,i) * ord(ch[i])-5);
       showmessage(inttostr(mp));
     end ;
     Form1.Edit2.Text := inttostr(mp);
    end;
     
    end.
    1 - Pour commencer, l'emploi de la référence d'un objet particulier dans la code d'une méthode d'objet n'est pas recommandable, l'identificateur Self à la place, ne rien mettre revient au même car il est implicite dans les méthodes d'objet. Ainsi, ton code ne sera pas dépendant de la référence Form1 qui n'est qu'une facilité de l'EDI de Delphi.

    2 - Le ShowMessage dans une fonction de calcul n'est pas du plus bel effet... je suppose que c'est pour déboguer ton code.

    3 - La function Puiss est totalement inutile, utilise en lieu et place la multiplication par deux via une variable locale ou emploies un décalage, par contre le code de calcul lui-même mérite une fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function Code(Value: String): Integer;
    var 
      I : Integer;
    begin
      Result := 0;
      For I :=  1 to length(Value) do
        Result := Result + (2 shl I) * (ord(Value[I])-5);
    End;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Edit2.Text := IntToStr(Code(Edit1.Text));
    end;
    ou plus trivialement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    function Code(Value: String): Integer;
    // Inspiré de la méthode de Horner pour l'évaluation des polynômes.
    var 
      I : Integer;
    begin
      Result := 0;
      For I :=  1 to length(Value) do
        Result := 2 * Result + ord(Value[I]) - 5;
    End;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Edit2.Text := IntToStr(Code(Edit1.Text));
    end;
    Attention : ton mot de passe en doit pas être trop long afin de ne pas déclencher de dépassement de capacité sur les entiers.

    4 - Enfin relativement à ta vraie question, le problème réside dans le fait que la fonction Code (introduite dans mon message) peut potentiellement donner le même résultat pour deux mot de passe différents. Essaies avec FZ et PF. Ce qui signifie qu'on ne pas trouver de réciproque à ta fonction de codage donc pas de décodage. Qui plus est, deux mots de passe différent peuvent aboutir à la même clé. C'est pas génial.

    Cdlt

  4. #4
    Aos
    Aos est déconnecté
    Membre habitué

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 189
    Points : 187
    Points
    187
    Par défaut
    oui, ça ressemble plus a du hashage.
    Ta solution (si tu veux garder ce codage) et d'effectuer la même opération
    avec le mot de passe que la personne introduit pour se logger.

    Tu vas donc comparer les mots de passer crypter. (un peu comme on fait
    avec php/md5()). Donc au lieu de décrypter le mot de passe de la bdd,
    tu cryptes le mot de passe entré et tu le compares à celui de ta bdd.

    J'espere m'être fait comprendre...

    a+

  5. #5
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 434
    Points : 5 846
    Points
    5 846
    Par défaut
    salut

    du fait de la limitation de l'entier on peut appliquer algorithme de bruteforce afin de retrouver toutes les possibilité de mots passe possible pour une valeur donné

    sans vérifier le code je vois bien un truc de ce genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    const
      {Liste des caractères à tester}
      CHAR : String = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
     
    procedure BruteForce(S : String;PassCrypte: Integer;Liste : TStrings);
    var
       i : integer;
    begin
       if (CRYPTE(S) = PassCrypte) then
          Liste.Add(Format('Password = %s #10#13Crypté = %s',[S,CRYPTE(S)]));
     
       if CRYPTE(S) < PassCrypte then
         for i:=1 to length(CHAR) do 
           BruteForce(S + CHAR[i], PassCrypte,Liste);
    end;
    et tu le lance comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
       Liste := TStringList.Create;
       try
          BruteForce('', PassCrypte,liste);
          Memo.text := Liste.Text;
       finally
          Liste.Free; {A la fin du brute force je libère la liste.}
      end;
    @+Phil

  6. #6
    Aos
    Aos est déconnecté
    Membre habitué

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 189
    Points : 187
    Points
    187
    Par défaut
    @anapurna : Exacte pour le brute force, après ça dépend de son appli ect...

    Si ton cryptage doit être fort, tu devrais simplement prendre des algos
    déjà fiable et fonctionnel sous delphi comme AES rijndael qui est un standard.

    De plus, la force d'un cryptage ne doit pas reposer sur l'algo en lui même mais plutôt sur sa clé. En d'autres termes, l'algo peut être connu et fiable.

Discussions similaires

  1. Demande d'aide pour query difficile
    Par ericjean514 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 22/02/2005, 18h52
  2. Demande d'aide pour une requête
    Par arkzor dans le forum Requêtes
    Réponses: 3
    Dernier message: 28/12/2004, 02h40
  3. demande d'aide sur samba
    Par marcoss dans le forum Développement
    Réponses: 5
    Dernier message: 04/12/2003, 19h38
  4. [TPW][cours]Demande d'aide pour finir un programme
    Par jf dans le forum Turbo Pascal
    Réponses: 21
    Dernier message: 16/06/2003, 18h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo