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 :

TFile.Encrypt comment ça fonctionne


Sujet :

Langage Delphi

  1. #1
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 607
    Billets dans le blog
    65
    Par défaut TFile.Encrypt comment ça fonctionne
    Bonjour,

    je viens de voir que l'unité system.IOUTils permettait (sous windows) de chiffrer(Encrypt)/déchiffrer(Decrypt) des fichiers mais je n'arrive pas à en comprendre le fonctionnement.
    J'ai certainement fait une bêtise lors de mon premier test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    procedure TForm6.BtnSaveClick(Sender: TObject);
    begin
    if OpenTextFileDialog1.execute then
      begin
        Memo1.Lines.SaveToFile(OpenTextFiledialog1.FileName);
        TFile.Encrypt(OpenTextFileDialog1.FileName);
      end;
    end;
    qui m'a bien ouvert un dialogue "une sorte de certificat" mais depuis je n'ai plus ce dernier et je pense n'avoir pas bien rempli ce dernier

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par défaut
    SetUserFileEncryptionKey et QueryUsersOnEncryptedFile à voir si c'est encapsulé dans le TFile
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    TFile.Encrypt appelle la fonction de Windows...ni plus ni moins d'après ce que je vois
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 607
    Billets dans le blog
    65
    Par défaut
    Oui, c'est ce que j'ai vu, ce qui rend le jus de boudin encore moins clair ! (moi, tout ce qui est MS, j'y vais sur la pointe des pieds)

    Du coup, je me suis amusé avec TMS Cryptography Pack (version de démo) pour faire un truc plus "portable"
    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    uses   CryptBase, MiscObj, AESObj;
     
    procedure TForm6.btnLoadClick(Sender: TObject);
    var aStream : TmemoryStream;
        FStream : TFileStream;
        aEs : TAESEncryption;
    begin
    if OpenTextFileDialog1.execute then
      begin
        FStream:=TFileStream.Create(OpenTextFileDialog1.FileName,fmOpenRead);
        try
           FStream.Position:=0;
           aStream:=TmemoryStream.Create;
           try
             aes:= TAESEncryption.Create;
             try
               aes.AType:= atCBC;
               aes.KeyLength:= kl256;
               aes.Key:= '12345678901234567890123456789012';
               aes.OutputFormat:= hexa;
               aes.PaddingMode:= TpaddingMode.PKCS7;
               aes.IVMode:= TIVMode.rand;
               if aes.DecryptStream(FStream,aStream)=0 then
                   begin
                    aStream.Position:=0;
                    Memo1.Lines.LoadFromStream(aStream);
                   end
                   else memo1.Lines.Add('Raté');
             finally
               aes.Free;
             end;
           finally
             aStream.Free;
           end;
        finally
          FStream.Free;
        end;
      end;
    end;
     
    procedure TForm6.BtnSaveClick(Sender: TObject);
    var aEs : TAESEncryption;
        aStream : TMemoryStream;
        oStream : TFileStream;
    begin
    if OpenTextFileDialog1.execute then
      begin
       aStream:=TmemoryStream.Create;
       try
       Memo1.Lines.SaveToStream(aStream);
       aes:= TAESEncryption.Create;
       try
       aes.AType:= atCBC;
       aes.KeyLength:= kl256;
       aes.Key:= '12345678901234567890123456789012';
       aes.OutputFormat:=hexa;
       aes.Unicode:=yesUni;
       aes.PaddingMode:= TpaddingMode.PKCS7;
       aes.IVMode:= TIVMode.rand;
       oStream:=TFileStream.Create(OpentextFiledialog1.FileName,fmOpenwrite);
       try
        Aes.EncryptStream(aStream,oStream);
       finally
        oStream.Free;
       end;
       finally
         aes.Free;
       end;
       finally
        aStream.Free;
       end;
      end;
    end;
    Cela écrit, il doit y avoir d'autres packs.
    Par exemple : DEC que je vais essayer de ce pas

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 607
    Billets dans le blog
    65
    Par défaut
    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    uses
     
         DECCiphers, DECCipherBase;    // DEC
     
    procedure TForm6.btnLoadDecClick(Sender: TObject);
    var aStream : TmemoryStream;
        FStream : TFileStream;
        Cipher  : TCipher_AES;
    begin
    if OpenTextFileDialog1.execute then
      begin
        FStream:=TFileStream.Create(OpenTextFileDialog1.FileName,fmOpenRead);
        try
           FStream.Position:=0;
           aStream:=TmemoryStream.Create;
           try
             Cipher:= TCipher_AES.Create;
             try
              Cipher.Init(RawByteString('1234567890abcdef'));
              Cipher.Mode := cmCBCx;
              Cipher.DecodeStream(FStream,aStream,FStream.Size-2); // les char fin de fichier !? 
              aStream.Position:=0;
              Memo1.Lines.LoadFromStream(aStream);
             finally
               cipher.Free;
             end;
           finally
             aStream.Free;
           end;
        finally
          FStream.Free;
        end;
      end;
    end;
     
     
    procedure TForm6.btnSaveDECClick(Sender: TObject);
    var
        Cipher     : TCipher_AES;
        aStream, cStream  : TMemoryStream;
        Fstream : TFileStream;
        SL : TStringList;
    begin
    if OpenTextFileDialog1.execute then
      begin
       aStream:=TmemoryStream.Create;
       try
        Memo1.Lines.SaveToStream(aStream);
        aStream.Position:=0;
        cStream:=TmemoryStream.Create;
        try
           Cipher := TCipher_AES128.Create;
           try
             Cipher.Init(RawByteString('1234567890abcdef'));
             Cipher.Mode := cmCBCx;
             FStream:=TFileStream.Create(OpenTextFileDialog1.FileName,fmOpenReadWrite);
             try
              cipher.EncodeStream(aStream,FStream,astream.Size);
            finally
              Fstream.Free;
             end;
           finally
             Cipher.Free;
           end;
        finally
          cStream.Free;
        end;
       finally
         aStream.Free;
       end;
      end;
    end;
    Il y a juste cette histoire de fin de fichier qui me turlupine, à faire à la lecture comme dans mon code où dans la sauvegarde ?
    En tout cas pas mal ce DEC

  6. #6
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par défaut
    Un padding multiple de 16o ?
    Donc tu auras autre chose avec un autre fichier si ça vient de ça
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 607
    Billets dans le blog
    65
    Par défaut
    Oui, ce n'est pas bon comme code, sans parler du fait que si je change de taille de clé je me retrouve avec une erreur
    Keymaterial is too large for use (Security Issue)
    Il y a des choses que je ne maitrise pas avec DEC et la doc est pauvre

  8. #8
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par défaut
    AES128 c'est pas justement une clé de 128bits soit 16o qui est utilisé pour chaque bloc de 16o

    Avec le CBC, il prend le bloc précédent pour chiffrer le bloc suivant en plus de la clé
    Un peu plus secure que le ECB, le seul que j'ai codé https://www.developpez.net/forums/d1...e/#post7762967
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  9. #9
    Membre émérite
    Avatar de ouiouioui
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    991
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 991
    Par défaut
    Et DCPcrypt ce n'est plus maintenu mais sa fonctionne bien je trouve
    Moi je l'utilise avec Rio

  10. #10
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par défaut
    DCPcrypt Idem, avec les sources
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  11. #11
    Membre éclairé

    Homme Profil pro
    Direction financière et formateur en gestion et contrôle de gestion
    Inscrit en
    Mai 2003
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Direction financière et formateur en gestion et contrôle de gestion
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2003
    Messages : 222
    Par défaut
    Bonjour à tous,
    Perso, je suis tombé sur ce fil de discussion https://www.developpez.net/forums/d1...-epilogue-2-a/
    J'utilise ce code sous forme d'unité depuis quelques mois : extrêmement rapide et bon courage pour décrypter. La même fonction crypte et décrypte en fonction de l'état du fichier : il est crypté, ça décrypte et inversement.
    Quand à la clé c'est une String. Chez moi elle fait 1024 caractères.

  12. #12
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    si j'en crois les commentaires c'est un chiffre de Vernam, or ce système (qui date de 1917 !) n'est fiable qu'en respectant 3 conditions fortement contraignantes !

    1. La clé doit être une suite de caractères au moins aussi longue que le message à chiffrer.
    2. Les caractères composant la clé doivent être choisis de façon totalement aléatoire.
    3. Chaque clé, ou « masque », ne doit être utilisée qu'une seule fois (d'où le nom de masque jetable).

    donc ce code avec un mot de passe quelconque ne répond à aucune des trois conditions et donne un chiffrement extrêmement faible
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  13. #13
    Membre éclairé
    Avatar de korntex5
    Homme Profil pro
    Directeur technique
    Inscrit en
    Juin 2004
    Messages
    417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 417
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ouiouioui Voir le message
    Et DCPcrypt ce n'est plus maintenu mais sa fonctionne bien je trouve
    Moi je l'utilise avec Rio
    Bonjour comment fais tu pour utiliser dcpcrypt2 ou autre pour chiffre en pkcs7?
    J'ai à ma dispo les fichiers ci-dessous mais je ne sais pas comment les utiliser...;{
    xxx-bundle.pem
    xxx.pem
    xxx.der
    xxx.p7b

Discussions similaires

  1. Compilateur asm, comment ça fonctionne ?
    Par AsmCode dans le forum Assembleur
    Réponses: 21
    Dernier message: 29/07/2005, 23h59
  2. Comment faire fonctionner une scroll bar ???
    Par toto4650 dans le forum MFC
    Réponses: 10
    Dernier message: 18/07/2005, 16h47
  3. [JToolTip] comment ca fonctionne ?
    Par Terminator dans le forum Composants
    Réponses: 2
    Dernier message: 29/05/2005, 15h18
  4. [Chat] Comment faire fonctionner Flash 7 sous Debian ?
    Par piff62 dans le forum Evolutions du club
    Réponses: 22
    Dernier message: 07/03/2005, 15h27
  5. comment faire fonctionner l'exe sur une autre machine
    Par brian79 dans le forum C++Builder
    Réponses: 8
    Dernier message: 28/05/2004, 14h00

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