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 :

Cryptage d'un fichier d'aide


Sujet :

Delphi

  1. #1
    Membre actif
    Avatar de Jlmat
    Homme Profil pro
    Consultant en Ressources Humaines, Retraité passionné de programmation
    Inscrit en
    Avril 2008
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant en Ressources Humaines, Retraité passionné de programmation
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 284
    Points : 287
    Points
    287
    Par défaut Cryptage d'un fichier d'aide
    Bonjour à tous

    Oui, je sais ça parait idiot de vouloir crypter un fichier d'aide. En fait je voudrais faire un suivi de mon projet en détaillant par des mots clés l'usage de certaines variables et fonctionnalités spécifiques de mon programme.
    Donc en plus du fichier d'aide normal pour l'utilisateur, il y aurait un double plus technique à l'intention du développeur de l'application pour son évolution. Une sorte de guide technique précis...
    Et par conséquent les fichiers d'aide étant dans le répertoire documentation et donc distribué, je ne voudrais pas que n'importe qui puisse accéder aux données techniques détaillées, mais seulement des membres ayant les droits.
    L'idée vient du fait que le fichier d'aide offre le mécanisme tout fait de recherche par mot clé!

    1. Comme c'est un fichier type CHM, est-ce possible de le crypter et décrypter si le user a les droits?
    2. Ou n'est-ce tout simplement pas faisable?


    Merci pour vos idées
    Je programme en Lazarus 3.2.2 sous windows 10 pro

  2. #2
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 345
    Points : 3 123
    Points
    3 123
    Par défaut
    Bonjour,

    cela doit pouvoir se crypter et se décrypter comme n'importe quel fichier. On crypte bien l'ensemble d'un disque dur !

    Il y a plein de méthodes plus ou moins sûres. Paul Thot avait proposé une méthode dans un post ancien que je ne retrouve pas.

    Sinon j'ai 2 petites fonctions (à tester), mais qui ne sont peut être pas géniales :

    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
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    { ===================================================================================}
     
       {  Codage du fichier FicSource en fichier FicDest à l'aide de Clef ===}
     
    Function CodeFichier(FicSource, FicDest, Clef: String ; var ErrChaine : String) : Boolean  ;
     
    var
      FromF, ToF: file;
      NumRead, NumWritten: Integer;          { Nombre de blocs lu et écrits à chaque BlocRead ou BlockWrite }
      NbRec  : Word;                         { Nombre de blocs à lire à chaque BlockRead : 1024 maxi }
      Num1   : Integer ;
      Buf: array[1..1024] of Char;           { Lecture par 1024 K sinon pile insuffisante }
      TailleClef   : Integer  ;              { Taille de la clef de codage }
      Indice       : Integer ;               { indice de la lettre à coder dans Buf }
      IndiceLettreCle : Integer ;            { indice de la lettre dans la clef de codage }
      ValLetCode      : LongInt ;            { Valeur Ascii de la lettre après codage }
      LettreCode      : Char ;               { lettre àprés codage }
     
    begin
      ErrChaine := '' ;
      If FileExists(FicSource) Then
         Begin
            If  (FicDest<>FicSource) Then
            Begin
            If ((FicDest<>'') and (FicDest<>'???')) Then
               Begin
                  TailleClef := Length(Clef);
                  If ((TailleClef>5) and (TailleClef<1025)) Then
                     Begin
                        { Calcul de la taille du bloc de lecture : multiple de la taille de la clef }
                        Num1 := 1024 div TailleClef ;
                        NbRec := TailleClef * Num1 ;
                        {$I-}
                        AssignFile(FromF, FicSource);	 { Ouvre entrée }
                        FileMode := 0; { Accès en lecture seule au fichier }
                        Reset(FromF, 1);		 { Taille des blocs à lire  = 1 }
                        AssignFile(ToF, FicDest);	 { Ouvre sortie }
                        Rewrite(ToF, 1);		 { Taille des blocs à écrire = 1 }
                        {$I+}
                        If IOResult = 0 Then
                           Begin
                              repeat
                                 BlockRead(FromF, Buf, NbRec, NumRead);
                                 { Codage du bloc }
                                 If (NumRead > 0 ) Then
                                    Begin
                                       For Indice := 1 To NumRead  Do
                                          Begin
                                             IndiceLettreCle := Indice Mod TailleClef ;
                                             If (IndiceLettreCle = 0) Then  IndiceLettreCle := TailleClef ;
                                             ValLetCode := (Ord(Buf[Indice])+Ord(Clef[IndiceLettreCle-1])) Mod 256   ;
                                             LettreCode := Chr(ValLetCode) ;
                                             Buf[Indice] := LettreCode    ;
                                          End ;
                                    End ;
                                 BlockWrite(ToF, Buf, NumRead, NumWritten);
                              until (NumRead = 0) or (NumWritten <> NumRead);
                              Close(FromF);
                              Close(ToF);
                              CodeFichier := True ;
                           End
                        Else
                           Begin
                              ErrChaine   := 'Erreur à l''ouverture des fichiers source ou destination' ;
                              CodeFichier := False ;             { Erreur d'ouverture en entrée ou en sortie }
                           End ;
                     End
                  Else
                     Begin
                        ErrChaine   := 'La taille de la clef de codage doit être comprise entre 6 et 1024 caractères' ;
                        CodeFichier := False ;             { Erreur dans la taille de la clef de codage }
                     End ;
               End
            Else
               Begin
                  ErrChaine   := 'Le nom du fichier de destination est incorrect' ;
                  CodeFichier := False ;             { le fichier de sortie est blanc ou ??? }
               End  ;
            End
            Else
               Begin
                  ErrChaine   := 'Le nom du fichier de destination doit être différent de celui du fichier source' ;
                  CodeFichier := False ;             { le fichier de sortie est Identique au fichier d'entrée}
               End ;
         End
      Else
         Begin
            ErrChaine   := Format('Le fichier source %s n''existe pas', [FicSource]) ;
            CodeFichier := False ;             { le fichier d'entrée n'existe pas }
         end ;
    end ;
     
    { ===================================================================================}
     
       {  Décodage du fichier FicSource en fichier FicDest à l'aide de Clef ===}
     
    Function DeCodeFichier(FicSource, FicDest, Clef : String ; var ErrChaine : String) : Boolean  ;
     
    var
      FromF, ToF: file;
      NumRead, NumWritten: Integer;          { Nombre de blocs lu et écrits à chaque BlocRead ou BlockWrite }
      NbRec  : Word;                         { Nombre de blocs à lire à chaque BlockRead : 1024 maxi }
      Num1   : Integer ;
      Buf: array[1..1024] of Char;           { Lecture par 1024 K sinon pile insuffisante }
      TailleClef   : Integer  ;              { Taille de la clef de codage }
      Indice       : Integer ;               { indice de la lettre à coder dans Buf }
      IndiceLettreCle : Integer ;            { indice de la lettre dans la clef de codage }
      ValLetCode      : LongInt ;            { Valeur Ascii de la lettre après codage }
      LettreCode      : Char ;               { lettre àprés codage }
     
    begin
      ErrChaine := '' ;
      If FileExists(FicSource) Then
         Begin
            If  (FicDest<>FicSource) Then
            Begin
            If ((FicDest<>'') and (FicDest<>'???')) Then
               Begin
                  TailleClef := Length(Clef);
                  If ((TailleClef>5) and (TailleClef<1025)) Then
                     Begin
                        { Calcul de la taille du bloc de lecture : multiple de la taille de la clef }
                        Num1 := 1024 div TailleClef ;
                        NbRec := TailleClef * Num1 ;
                        {$I-}
                        AssignFile(FromF, FicSource);	 { Ouvre entrée }
                        FileMode := 0; { Accès en lecture seule au fichier }
                        Reset(FromF, 1);		 { Taille des blocs à lire  = 1 }
                        AssignFile(ToF, FicDest);	 { Ouvre sortie }
                        Rewrite(ToF, 1);		 { Taille des blocs à écrire = 1 }
                        {$I+}
                        If IOResult = 0 Then
                           Begin
                              repeat
                                 BlockRead(FromF, Buf, NbRec, NumRead);
                                 { Décodage du bloc }
                                 If (NumRead > 0 ) Then
                                    Begin
                                       For Indice := 1 To NumRead  Do
                                          Begin
                                             IndiceLettreCle := Indice Mod TailleClef ;
                                             If (IndiceLettreCle = 0) Then  IndiceLettreCle := TailleClef ;
                                             ValLetCode := (Ord(Buf[Indice])-Ord(Clef[IndiceLettreCle-1])) Mod 256   ;
                                             LettreCode := Chr(ValLetCode) ;
                                             Buf[Indice] := LettreCode    ;
                                          End ;
                                    End ;
                                 BlockWrite(ToF, Buf, NumRead, NumWritten);
                              until (NumRead = 0) or (NumWritten <> NumRead);
                              Close(FromF);
                              Close(ToF);
                              DeCodeFichier := True ;
                           End
                        Else
                           Begin
                              ErrChaine   := 'Erreur à l''ouverture des fichiers source ou destination' ;
                              DeCodeFichier := False ;             { Erreur d'ouverture en entrée ou en sortie }
                           End ;
                     End
                  Else
                     Begin
                        ErrChaine   := 'La taille de la clef de codage doit être comprise entre 6 et 1024 caractères' ;
                        DeCodeFichier := False ;             { Erreur dans la taille de la clef de codage }
                     End ;
               End
            Else
               Begin
                  ErrChaine   := 'Le nom du fichier de destination est incorrect' ;
                  DeCodeFichier := False ;             { le nom du fichier de sortie est blanc ou ??? }
               End  ;
            End
            Else
               Begin
                  ErrChaine   := 'Le nom du fichier de destination doit être différent de celui du fichier source' ;
                  DeCodeFichier := False ;             { le fichier de sortie est Identique au fichier d'entrée}
               End ;
         End
      Else
         Begin
            ErrChaine   := Format('Le fichier source %s n''existe pas',[FicSource]) ;
            DeCodeFichier := False ;             { le fichier d'entrée n'existe pas }
         end ;
    end ;
     
    { ===================================================================================}
    A+
    Charly

  3. #3
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    il est aussi possible de faire des fichiers auto-déchiffrable. Avec TMS Cryptography TLockFile ce devrait être un jeu d'enfant (je n'ai pas testé cette possibilité) tout en étant hyper chiffré
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  4. #4
    Membre actif
    Avatar de Jlmat
    Homme Profil pro
    Consultant en Ressources Humaines, Retraité passionné de programmation
    Inscrit en
    Avril 2008
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant en Ressources Humaines, Retraité passionné de programmation
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 284
    Points : 287
    Points
    287
    Par défaut
    Merci les amis, j'étudie vos propositions et vous dit ce qu'il en est!

    Je programme en Lazarus 3.2.2 sous windows 10 pro

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    la fonction de cryptage est ici, mais ça ne répond pas vraiment au problème.

    la solution la plus simple est de ne pas diffuser les docs confidentielles de façon automatique ou encore de les mettre dans un ZIP avec mot de passe à la rigueur.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  6. #6
    Membre confirmé Avatar de blonde
    Femme Profil pro
    Développeur Delphi
    Inscrit en
    Septembre 2003
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Septembre 2003
    Messages : 278
    Points : 477
    Points
    477
    Par défaut
    Avec quel outil génères-tu le fichier chm ? Es-tu obligé de laisser le doc. technique dans le dossier "documentation" ? Tu pourrais mettre les doc. développeur avec les sources qui ne sont pas livrées.

  7. #7
    Membre actif
    Avatar de Jlmat
    Homme Profil pro
    Consultant en Ressources Humaines, Retraité passionné de programmation
    Inscrit en
    Avril 2008
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant en Ressources Humaines, Retraité passionné de programmation
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 284
    Points : 287
    Points
    287
    Par défaut
    Merci Paul pour le code de cryptage et tes conseils.:
    ne pas diffuser les docs confidentielles de façon automatique ou encore de les mettre dans un ZIP avec mot de passe à la rigueur.
    ça n'est pas un logiciel commercial, mais le Zip avec Mot de passe, ça pourrait être une idée!

    En fait, la doc technique je la fait surtout pour moi (mémoire hachée par mes différentes activités) et un développeur extérieur à qui je confierai la suite du développement...

    A Blonde: Je travaille avec HelpnDoc
    Je programme en Lazarus 3.2.2 sous windows 10 pro

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 425
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 425
    Points : 1 326
    Points
    1 326
    Par défaut
    Bonsoir à toutes et à tous,

    @ JImat à l'époque j'utilisais ceci qui fonctionne correctement :

    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
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
     
    {**************************************************************}
    {                  Base 64 - by David Barton                   }
    {--------------------------------------------------------------}
     
     const
      B64: array[0..63] of byte= (65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,
        81,82,83,84,85,86,87,88,89,90,97,98,99,100,101,102,103,104,105,106,107,108,
        109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,
        54,55,56,57,43,47);
     
    function B64Encode(pInput: pointer; pOutput: pointer; Size: longint): longint;
    var
      i, iptr, optr: integer;
      Input, Output: PByteArray;
    begin
      Input:= PByteArray(pInput); Output:= PByteArray(pOutput);
      iptr:= 0; optr:= 0;
      for i:= 1 to (Size div 3) do
      begin
        Output^[optr+0]:= B64[Input^[iptr] shr 2];
        Output^[optr+1]:= B64[((Input^[iptr] and 3) shl 4) + (Input^[iptr+1] shr 4)];
        Output^[optr+2]:= B64[((Input^[iptr+1] and 15) shl 2) + (Input^[iptr+2] shr 6)];
        Output^[optr+3]:= B64[Input^[iptr+2] and 63];
        Inc(optr,4); Inc(iptr,3);
      end;
      case (Size mod 3) of
        1: begin
             Output^[optr+0]:= B64[Input^[iptr] shr 2];
             Output^[optr+1]:= B64[(Input^[iptr] and 3) shl 4];
             Output^[optr+2]:= byte('=');
             Output^[optr+3]:= byte('=');
           end;
        2: begin
             Output^[optr+0]:= B64[Input^[iptr] shr 2];
             Output^[optr+1]:= B64[((Input^[iptr] and 3) shl 4) + (Input^[iptr+1] shr 4)];
             Output^[optr+2]:= B64[(Input^[iptr+1] and 15) shl 2];
             Output^[optr+3]:= byte('=');
           end;
      end;
      Result:= ((Size+2) div 3) * 4;
    end;
     
     
    function Base64Encode(const Value: AnsiString): AnsiString;
    begin
      SetLength(Result,((Length(Value)+2) div 3) * 4);
      B64Encode(@Value[1],@Result[1],Length(Value));
    end;
     
     
    function B64Decode(pInput: pointer; pOutput: pointer; Size: longint): longint;
    var
      i, j, iptr, optr: integer;
      Temp: array[0..3] of byte;
      Input, Output: PByteArray;
    begin
      Input:= PByteArray(pInput); Output:= PByteArray(pOutput);
      iptr:= 0; optr:= 0;
      Result:= 0;
      for i:= 1 to (Size div 4) do
      begin
        for j:= 0 to 3 do
        begin
          case Input^[iptr] of
            65..90 : Temp[j]:= Input^[iptr] - Ord('A');
            97..122: Temp[j]:= Input^[iptr] - Ord('a') + 26;
            48..57 : Temp[j]:= Input^[iptr] - Ord('0') + 52;
            43     : Temp[j]:= 62;
            47     : Temp[j]:= 63;
            61     : Temp[j]:= $FF;
          end;
          Inc(iptr);
        end;
        Output^[optr]:= (Temp[0] shl 2) or (Temp[1] shr 4);
        Result:= optr+1;
        if (Temp[2]<> $FF) and (Temp[3]= $FF) then
        begin
          Output^[optr+1]:= (Temp[1] shl 4) or (Temp[2] shr 2);
          Result:= optr+2;
          Inc(optr)
        end
        else if (Temp[2]<> $FF) then
        begin
          Output^[optr+1]:= (Temp[1] shl 4) or (Temp[2] shr 2);
          Output^[optr+2]:= (Temp[2] shl 6) or  Temp[3];
          Result:= optr+3;
          Inc(optr,2);
        end;
        Inc(optr);
      end;
    end;
     
    function Base64Decode(const Value: AnsiString): AnsiString;
    begin
      SetLength(Result,(Length(Value) div 4) * 3);
      SetLength(Result,B64Decode(@Value[1],@Result[1],Length(Value)));
    end;
    Utilisation :

    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
     
    //Utilisation Crypter
    procedure TFcode.BcodeClick(Sender: TObject);
    begin
     //Rd1 et Rd2 = TRichEdit
     
     Rd1.lines.Text := Base64Encode(Rd1.Lines.Text)  ;   
     
    end;
     
    //Utilisation Décripter
    procedure TFcode.BdecodeClick(Sender: TObject);
    begin
     Rd2.Text := Base64Decode(rd1.Text) ;
    end;
    @+,

    cincap

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    euh...ça c'est pas un cryptage, c'est un encodage

    tu transformes un flux de données binaire en base 256 en un flux en base 64, un peu comme si tu prenais un IntToHex(Ord(c)) de chaque caractère de la chaîne sauf que c'est un peu plus compact.

    n'importe quel informaticien un tant soit peu cultivé reconnaîtra immédiatement du base64 dans une chaîne comme celle-ci: RW5jb2RhZ2UgYmFzZSA2NA==

    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  10. #10
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 425
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 425
    Points : 1 326
    Points
    1 326
    Par défaut
    Bonjour à toutes et à tous,

    @ Paul TOTH, merci pour l'information, je m'en servais que pour mes logiciels de test à mon domicile.

    A l'époque suivant l'article de David Barton, c'était placé dans la description de cryptage d'où ma confusion.

    @+,

    cincap

  11. #11
    Membre confirmé Avatar de blonde
    Femme Profil pro
    Développeur Delphi
    Inscrit en
    Septembre 2003
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Septembre 2003
    Messages : 278
    Points : 477
    Points
    477
    Par défaut
    Et si tu utilisais HelpNDoc pour générer un pdf crypté ou bien bloqué avec un mot de passe ?
    J'ai vu que c'est possible : https://www.helpndoc.com/step-by-ste...-pdf-document/
    Et tu gardes la fonction de recherche associée au pdf.

  12. #12
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 425
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 425
    Points : 1 326
    Points
    1 326
    Par défaut
    Bonsoir à toutes et à tous,

    Avec le logiciel Word, Excell, ainsi que OpenOffice (qui est gratuit) on peut convertir le document au format .pdf et qui peut être sécurisé facilement par un mot de passe pour l'ouverture et un mot de passe pour l'autorisation.

    L'alternative du fichier .Zip est aussi correcte.

    Printscreen en attache.

    @+,

    cincap
    Images attachées Images attachées  

  13. #13
    Membre actif
    Avatar de Jlmat
    Homme Profil pro
    Consultant en Ressources Humaines, Retraité passionné de programmation
    Inscrit en
    Avril 2008
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant en Ressources Humaines, Retraité passionné de programmation
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 284
    Points : 287
    Points
    287
    Par défaut
    Merci à tous pour ces réponses circonstanciées et pertinentes!
    J'avais quelques difficultés au niveau de la programmation du cryptage et décryptage de fichier. Sans compter les anciens types qui n'existent plus dans Rio 10.3: par exemple : DWord...
    La piste de helpnDoc, Word, Excell, Zip est à creuser.
    OpenOffice, j'ai abandonné, ça n'est plus valable en terme de productivité lorsque l'on veut faure des documents de qualité avec un minimum de rapidité et fiabilité...
    Mais je continue de faire des tests à partir de vos remarques. Je suis un peu lent parce que j'ai divers activités prenantes...
    Je ne ferme pas le sujet car je voudrais vous faire un retour des tests que je ferais...

    bonne journée

    jlmat
    Je programme en Lazarus 3.2.2 sous windows 10 pro

  14. #14
    Membre actif
    Avatar de Jlmat
    Homme Profil pro
    Consultant en Ressources Humaines, Retraité passionné de programmation
    Inscrit en
    Avril 2008
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant en Ressources Humaines, Retraité passionné de programmation
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 284
    Points : 287
    Points
    287
    Par défaut
    Bonjour à tous,

    je clôture ce post avec un peu de retard. j'ai opté pour la solution de Blonde:

    Et si tu utilisais HelpNDoc pour générer un pdf crypté ou bien bloqué avec un mot de passe ?
    J'ai vu que c'est possible : https://www.helpndoc.com/step-by-ste...-pdf-document/
    Et tu gardes la fonction de recherche associée au pdf.
    J’apprécie l'aide HelpNDoc qui offre plusieurs possibilités de format du fichier d'aide. J'ai opté pour le cryptage du dossier technique au format PDF avec un chiffrement sur 40 bits au lieu de 128 bits afin d'alléger le format de sortie.
    L'astuce est qu'il ne faut pas utiliser la génération rapide (affichage immédiat en bas) qui ne permet pas le cryptage mais la génération en haut qui permet une personnalisation plus poussé et le cryptage.

    Ensuite, l'utilisation du fichier crypté n'est possible que si vous entrez un mot de passe propriétaire ou utilisateur.

    On peut également générer la table des constantes dans Delphi des chapitres (aide contextuelle) ou sur des mots clés. c'est très bien... et facile à mettre en oeuvre

    Bien à vous
    Je programme en Lazarus 3.2.2 sous windows 10 pro

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

Discussions similaires

  1. [Débutant] Aide sur le cryptage d'un fichier
    Par Sobhi9009 dans le forum VB.NET
    Réponses: 0
    Dernier message: 22/11/2016, 15h00
  2. Réponses: 7
    Dernier message: 26/06/2003, 09h11
  3. Réponses: 2
    Dernier message: 25/10/2002, 22h19
  4. Besoin du fichier d'aide du SDK DirectX7 (pour DirectDraw)
    Par Magus (Dave) dans le forum DirectX
    Réponses: 5
    Dernier message: 02/10/2002, 13h08
  5. appel de fichier d'Aide
    Par Atrebate62 dans le forum Composants VCL
    Réponses: 5
    Dernier message: 24/09/2002, 14h13

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