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

Lazarus Pascal Discussion :

Décrypter un fichier avec l'unité Blowfish [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 15
    Points : 15
    Points
    15
    Par défaut Décrypter un fichier avec l'unité Blowfish
    Bonjour,

    Pour encrypter et décrypter un fichier, j'ai décidé d'utiliser la méthode BlowFish.

    Pour l'encryptage, j'ai utilisé la méthode suivante sans aucun problème.

    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
     
    procedure TForm1.ButtonEncClick(Sender: TObject);
    var VInput, VOutput: TMemoryStream;
      VCypher: TBlowfishEncryptStream;
     
    begin
       VOutput := TMemoryStream.create;
       VCypher := TBlowfishEncryptStream.create('MotDePasse', VOutput);
       try
          VInput := TMemoryStream.create;
          VInput.LoadFromFile('FichierDepart.txt');
          VCypher.writebuffer(VInput.memory, VInput.size);
          VOutput.SaveToFile('FichierEncrypter.enc');
       finally
           VCypher.free;
           VInput.free;
           VOutput.free;
       end;
    end;
    Par contre pour le décryptage, je n'arrive pas à trouver la solution. Ci-dessous un des bouts de code que j'ai testés.

    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
     
    procedure TForm1.ButtonDecClick(Sender: TObject);
    var VInput, VOutput: TMemoryStream;
      VCypher: TBlowFishDecryptStream;
     
    begin
       VInput := TMemoryStream.create;
       VInput.LoadFromFile('FichierEncrypter.enc');
       VOutput := TMemoryStream.create;
       VCypher := TBlowFishDecryptStream.create('MotDePasse', VInput);
       VCypher.Position:=0;
       Voutput.copyfrom( VCypher, VInput.Size);
       VOutput.SaveToFile('FichierDecrypter.dec');   
     
       VCypher.free;
       VInput.free;
       VOutput.free;
    end;
    Si quelqu'un a une idée de solution

    Merci

  2. #2
    Membre confirmé

    Homme Profil pro
    Autre
    Inscrit en
    Novembre 2015
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Novembre 2015
    Messages : 145
    Points : 625
    Points
    625
    Par défaut
    Votre fichier est incorrectement encrypté.

    Utilisez par exemple plutôt:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //     VCypher.writebuffer(VInput.memory, VInput.size);      // incorrect
         VCypher.CopyFrom(vInput, VInput.size);
    De toute façon, il y aussi un problème de padding (8 octets pour le Blowfish).

  3. #3
    Membre confirmé

    Homme Profil pro
    Autre
    Inscrit en
    Novembre 2015
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Novembre 2015
    Messages : 145
    Points : 625
    Points
    625
    Par défaut
    Concernant votre problème de padding, libérez votre stream Blowfish avant l'écriture (ou la lecture) finale des données. Cela provoquera un flush des éventuelles données restantes, en attente.

    Exemple dans votre procédure TForm1.Button2Click:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ...
         VCypher.CopyFrom(vInput, VInput.size);
         VCypher.free;        // ajouter ici
         VOutput.SaveToFile('FichierEncrypter.enc');
      finally
    //      VCypher.free;    // supprimer ici, mais problème de non libération éventuelle de la ressource en cas de déclenchement d'une exception (à revoir)
          VInput.free;
          VOutput.free;
      end;
    end;
    Cela ne règle pas le problème de la détermination de la taille réelle du fichier après le décryptage, mais au moins vous aurez toutes vos données (un peu plus que vos données, en fait).

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 15
    Points : 15
    Points
    15
    Par défaut
    Merci FChrisF pour tes réponses.

    Au vu des réponses, j'ai mis de côté Blowfish, pour résoudre mon problème j'ai décidé d'utiliser un système de modulo avec l'opérateur XOR.

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

Discussions similaires

  1. [PHP 4] [Upload] Upload - Souci de taille de fichier
    Par R@IZER dans le forum Langage
    Réponses: 12
    Dernier message: 08/01/2009, 23h42
  2. quelques soucis de lecture de fichiers avec fscanf
    Par monsieurab dans le forum Bibliothèque standard
    Réponses: 2
    Dernier message: 05/11/2008, 14h28
  3. petit souci d'import de fichier
    Par lamiaa94 dans le forum Général Python
    Réponses: 3
    Dernier message: 27/09/2007, 10h47
  4. Réponses: 4
    Dernier message: 28/03/2007, 09h12
  5. petits soucis pour trouver un fichier autoexec.bat
    Par lestat69 dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 20/10/2005, 14h11

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