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

C# Discussion :

Lecture automatique des fichiers Office - Détection de mots de passe pour PowerPoint


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 10
    Par défaut Lecture automatique des fichiers Office - Détection de mots de passe pour PowerPoint
    Bonjour,

    J'ai un programme qui doit traiter en automatique (donc sans intervention humaine) des fichiers doc, xls et ppt.
    Le problème est que les fichiers soumis peuvent avoir ou non des mots de passe (auquel cas, le programme ne doit pas les traiter).

    Concernant Word et Excel, pour détecter des fichiers protégés par mot de passe, il suffit de passer en paramètre de la méthode Open un mot de passe vide et de catcher l'erreur qui correspond (exemple de code ci-dessous)

    Par contre, pour POWER POINT, je n'ai pas trouvé de solution car la méthode Open ne prend pas de mot de passe en paramètre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Microsoft.Office.Interop.PowerPoint.ApplicationClass pptApplication = new Microsoft.Office.Interop.PowerPoint.ApplicationClass();
    Presentation docPpt = null;
    try
     {
                    docPpt = pptApplication.Presentations.Open(fichierPpt, MsoTriState.msoFalse, MsoTriState.msoFalse, MsoTriState.msoFalse);
    => Je ne peux pas catcher d'erreur, l'application se bloque avec un invite de commande demandant le mot de passe...
    => Y a-t-il une solution ? Peut-on catcher la pop-up qui s'ouvre demandant le mot de passe ?

    Merci de toute aide


    Pour ceux que cela intéresse, voici le code pour Word et Excel :

    Code pour Word :

    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
    Microsoft.Office.Interop.Word.ApplicationClass wordApplication = new Microsoft.Office.Interop.Word.ApplicationClass();
                Document docWord = null;
    object paramPassword = "";
    object paramMissing = Type.Missing;
     
    try
               {
                        docWord = wordApplication.Documents.Open(ref fichierWord, ref paramMissing, ref paramMissing, ref paramMissing, ref  paramPassword, ref paramMissing,
                                                             ref paramMissing, ref paramMissing, ref paramMissing, ref openFormat, ref paramMissing,
                                                             ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing);
     
                    }
                    catch (System.Runtime.InteropServices.COMException exProtect)
                    {
                        string labelError = exProtect.ToString();
                        if (labelError.Contains("Mot de passe non valide"))
                        {.......etc
    Code pour Excel :

    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
    Microsoft.Office.Interop.Excel.ApplicationClass excelApplication = new Microsoft.Office.Interop.Excel.ApplicationClass();
                Workbook excelWorkBook = null;
    object paramMissing = Type.Missing;
    object paramUpdateLinks = 2; // permet de dire de ne pas mettre à jour les liens du fichier excel
                    object paramPassword = "";
     
                   try
                    {
                        excelWorkBook = excelApplication.Workbooks.Open(fichierExcel, paramUpdateLinks, paramMissing, paramMissing, paramPassword, paramMissing, paramMissing,
                                                                    paramMissing, paramMissing, paramMissing, paramMissing, paramMissing, paramMissing, paramMissing, paramMissing);
                        }
                    catch (System.Runtime.InteropServices.COMException exProtect)
                    {
                        string labelError = exProtect.ToString();
                        if (labelError.Contains("Mot de passe non valide"))
                        {.... etc

  2. #2
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 10
    Par défaut Résolution
    Finalement, j'ai trouvé la solution toute seule pour le traitement des PowerPoint (les Word et Excel étant gérés plus "proprement" et encore - voir code ci-dessus) .

    Je la rajoute ici même si cela n'intéresse personne...
    Une technique bien bourrin je dois l'admettre mais faute de mieux....

    Les fichiers Office (dans mon cas, le power point) lorsqu'ils sont protégés en lecture avec mot de passe possèdent dans leur en-tête la présence de "EncryptedSummary" (il suffit d'ouvrir le fichier dans un éditeur hexadécimal pour le voir)

    Donc le contournement est d'ouvrir ce flux et de rechercher la chaine hexadécimale qui va bien. J'effectue cette recherche via un fichier Perl (et pas directement dans mon programme C# car ça m'arrange)

    En Perl, ça donne :

    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
    #use strict;
     
    open(PPT,"./TEST MOT de PASSE.ppt");
    while (my $lecture = <PPT>){
        # Recherche du mot Encrypted de EncryptedSummary toujours présent dans les fichiers cryptés
        # Recherche en hexa évidemment
        if ( $lecture =~ /\x45\x00\x6E\x00\x63\x00\x72\x00\x79\x00\x70\x00\x74\x00\x65\x00\x64/){
            # faire l'action que l'on veut
            print STDOUT "Fichier protege!!";
            exit(5);
        }
    }
    print STDOUT "Fichier non protege";
    close(PPT);
    exit(0);
    Et voilà !

  3. #3
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 10
    Par défaut
    Bonjour,

    Suite à la mise à jour de sécurité de Microsoft Office 2007 en août, il faut modifier 2 choses dans le code Word et Excel pour que cela reste valide :

    1. Le mot de passe doit être renseigné par un mot bidon
    2. Le label d'erreur a changé et il faut juste rechercher "mot de passe" sans tenir compte de la casse

    Soit :

    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
     
    object paramPassword = "MON MOT DE PASSE";
     
                    try
                    {
                        docWord = wordApplication.Documents.Open(ref fichierWord, ref paramMissing, ref paramMissing, ref paramMissing, ref  paramPassword, ref paramMissing,
                                                             ref paramMissing, ref paramMissing, ref paramMissing, ref openFormat, ref paramMissing,
                                                             ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing, ref paramMissing);
     
                        Console.WriteLine("     - Traitement du fichier {0} ", fichierWord);
                    }
                    catch (System.Runtime.InteropServices.COMException exProtect)
     
                    {
                        string labelError = exProtect.ToString();
                        labelError = labelError.ToLower();
                        if ( (labelError.Contains("mot de passe")) || (labelError.Contains("password")))
                        {
                            Console.WriteLine("     - Fichier {0} protege en lecture", fichierWord);

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

Discussions similaires

  1. Suppression automatique des fichiers sur le serveur
    Par phpieur dans le forum ASP.NET
    Réponses: 9
    Dernier message: 17/05/2007, 13h19
  2. écriture/lecture dans des fichiers
    Par rafale001 dans le forum C
    Réponses: 14
    Dernier message: 02/03/2007, 16h59
  3. Récupérer automatiquement des fichiers sous ftp
    Par Mourne dans le forum Windows
    Réponses: 1
    Dernier message: 03/01/2007, 12h21
  4. Lire et modifier les propriétés des fichiers Office
    Par SilkyRoad dans le forum Contribuez
    Réponses: 4
    Dernier message: 18/09/2006, 22h25
  5. Suppression automatique des fichiers trop vieux
    Par HwRZxLc4 dans le forum Langage
    Réponses: 5
    Dernier message: 09/05/2006, 11h22

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