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

 Delphi Discussion :

Crypter un memo


Sujet :

Delphi

  1. #1
    Membre averti
    Homme Profil pro
    Amateur
    Inscrit en
    Mai 2020
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Mai 2020
    Messages : 35
    Par défaut Crypter un memo
    Bonjour à tous, voilà mon problème, ça fait 3 jours que je tourne en rond, j'ai fait plusieurs recherche, mais rien trouvé. Je cherche une solution pour crypter/décrypter un texte de longueur variable dans un TDemo. J'ai une routine de cryptage XOR avec choix d'une clé, ça fonctionne très bien avec des TEdit. Mais je voudrais pouvoir faire la même chose avec un texte plus long. Merci pour votre aide.

    Voilà ma routine :

    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 CryptDeCrypt(St:string;Key:integer):string;
     
    var
      i:byte;
      StCrypt:string;
      CleInt : integer;
     
    begin
      //cleInt:=strtoint(key);
      StCrypt:=''; //Initialise la variable
      for i:=1 to Length(St) do //Pour tous les caractères de notre chaine...
      StCrypt:=StCrypt+Char(Byte(St[i]) xor cleInt shr 8); //...On effecute le cryptage
      result:=StCrypt; //Renvoie le résultat
    end;
    J'ai oublié de préciser, je suis sous delphi 2010 Architect.

  2. #2
    Membre Expert
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 524
    Billets dans le blog
    10
    Par défaut
    Tu copie ton stringlist dans un string
    MonString ;= Memo1.lines.text

    Du crypte ton string et tu sauvegarde ton string en le mappant sur un TMemoryString

    Demarche inverse pour le decryptage

  3. #3
    Membre averti
    Homme Profil pro
    Amateur
    Inscrit en
    Mai 2020
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Mai 2020
    Messages : 35
    Par défaut
    Citation Envoyé par ALWEBER Voir le message
    Tu copie ton stringlist dans un string
    MonString ;= Memo1.lines.text

    Du crypte ton string et tu sauvegarde ton string en le mappant sur un TMemoryString

    Demarche inverse pour le decryptage
    Merci pour ton aide, mais je n'arrive pas à encapsuler tes infos, si tu peux faire un exemple, je t'en remercie.

  4. #4
    Membre Expert
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 524
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par zounar_j5 Voir le message
    Merci pour ton aide, mais je n'arrive pas à encapsuler tes infos, si tu peux faire un exemple, je t'en remercie.
    J'ai modifié ta procédure i : integer. Et je suis passé en ANSIString (1 caractère = 1 octet)
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    function CryptDeCrypt(St1: AnsiString; CleInt: integer): AnsiString;
    var
      i1: integer;
      StCrypt: string;
    begin
      result := '';
      for i1 := 1 to Length(St1) do
        result := result + AnsiChar(Byte(St1[i1]) xor CleInt);
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      St1, St2: AnsiString;
      MS1: TMemoryStream;
      i1: integer;
    begin
      St1 := Memo1.Lines.Text;
      St2 := CryptDeCrypt(St1, $AA);
      MS1 := TMemoryStream.create;
      MS1.SetSize(Length(St2));
      for i1 := 1 to Length(St2) do
        MS1.Write(Byte(St2[i1]), 1);
      MS1.Position := 0;
      MS1.SaveToFile('CryptFile.CPT');
      MS1.Free
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    var
      St1, St2: AnsiString;
      MS1: TMemoryStream;
      i1: integer;
      C1: AnsiChar;
     
    begin
      MS1 := TMemoryStream.create;
      MS1.LoadFromFile('CryptFile.CPT');
      MS1.Position := 0;
      St2 := '';
      for i1 := 1 to MS1.Size do
      begin
        MS1.Read(C1, 1);
        St2 := St2 + C1;
      end;
      St1 := CryptDeCrypt(St2, $AA);
      Memo1.Lines.Text := St1;
      MS1.Free
    end;

  5. #5
    Membre éprouvé
    Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 391
    Par défaut
    Routines de compression / décompression

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    uses
      ZLib;
     
    function ZCompressString(aText: string; aCompressionLevel: TZCompressionLevel): string;
    var
      strInput,
      strOutput: TStringStream;
      Zipper: TZCompressionStream;
    begin
      Result:= '';
      strInput:= TStringStream.Create(aText);
      strOutput:= TStringStream.Create;
      try
        Zipper:= TZCompressionStream.Create(strOutput, aCompressionLevel);
        try
          Zipper.CopyFrom(strInput, strInput.Size);
        finally
          Zipper.Free;
        end;
        Result:= strOutput.DataString;
      finally
        strInput.Free;
        strOutput.Free;
      end;
    end;
     
    function ZDecompressString(aText: string): string;
    var
      strInput,
      strOutput: TStringStream;
      Unzipper: TZDecompressionStream;
    begin
      Result:= '';
      strInput:= TStringStream.Create(aText);
      strOutput:= TStringStream.Create;
      try
        Unzipper:= TZDecompressionStream.Create(strInput);
        try
          strOutput.CopyFrom(Unzipper, Unzipper.Size);
        finally
          Unzipper.Free;
        end;
        Result:= strOutput.DataString;
      finally
        strInput.Free;
        strOutput.Free;
      end;
    end;


    ou

    Easy Compression Library, Perso, j'ai acheté cette bibliothèque très pratique pour faire de la compression/cryptage de données (Fichier, DB, etc...).
    https://www.componentace.com/compres...on_library.htm

    Exemple :
    https://www.componentace.com/help/ec...f_a_string.htm

  6. #6
    Membre éprouvé
    Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 391
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function CryptDeCrypt(DataStr: AnsiString; key: integer): AnsiString;
    var
      I: integer;
    begin
      Result := '';
     
      for I := 1 to Length(DataStr) do
        Result := Result + AnsiChar(Byte(DataStr[I]) xor key);
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TForm1.Button1Click(Sender: TObject);
    var
      Stream: TStringStream;
    begin
      Stream := TStringStream.Create;
      Stream.WriteString(String(CryptDeCrypt(AnsiString(Memo1.Lines.Text), 123456)));
      Stream.Position := 0;
      Memo1.Lines.LoadFromStream(Stream);
      FreeAndNil(Stream);
    end;

  7. #7
    Membre éprouvé
    Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 391
    Par défaut
    Citation Envoyé par zounar_j5 Voir le message
    Bonjour à tous, voilà mon problème, ça fait 3 jours que je tourne en rond, j'ai fait plusieurs recherche, mais rien trouvé. Je cherche une solution pour crypter/décrypter un texte de longueur variable dans un TDemo. J'ai une routine de cryptage XOR avec choix d'une clé, ça fonctionne très bien avec des TEdit. Mais je voudrais pouvoir faire la même chose avec un texte plus long. Merci pour votre aide

    Pour info le type byte : Valeur Min = 0, Valeur Max = 255.

    ça fait 3 jours que je tourne en rond
    Avant de copier du code sur internet, assure-toi d'avoir une bonne compréhension du code que tu copies et partages.
    http://delphipage.free.fr/cryptage.html

  8. #8
    Membre averti
    Homme Profil pro
    Amateur
    Inscrit en
    Mai 2020
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Mai 2020
    Messages : 35
    Par défaut
    Merci pour votre aide, c'est exactement ce que je cherchais, et pour répondre à XeGregory, effectivement, j'ai pris l'exemple sur Delphipage, mais il était pas assez complet pour moi, mais ça m'a donné une base, juste que je pensais pas que pour un mémo c'était un peu plus compliqué. Merci quand même à vous tous et bonne continuation.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. ListView, SubItem et memo
    Par boyerf dans le forum Composants VCL
    Réponses: 3
    Dernier message: 01/12/2002, 08h19
  2. [Kylix] crypter la saisie sous kylix
    Par nahmsath dans le forum EDI
    Réponses: 2
    Dernier message: 15/10/2002, 13h16
  3. Réponses: 3
    Dernier message: 22/07/2002, 14h19
  4. memo+fontdialog
    Par bohemianvirtual dans le forum Composants VCL
    Réponses: 2
    Dernier message: 18/07/2002, 14h27
  5. [Kylix] Memo color
    Par Metal3d dans le forum EDI
    Réponses: 1
    Dernier message: 21/05/2002, 17h12

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