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

VC++ .NET Discussion :

securité sous visual c++


Sujet :

VC++ .NET

  1. #81
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Par défaut
    je cherche à compresser puis à crypter

  2. #82
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Par défaut
    en fait j'ai crée une form1 avec des bouttons(crypter, decrypter, compresser, decompresser), et chaque bouton et associé à une fonction
    pour crypter et decrypter ca marche bien
    mais pour compresser/compresser ca marche pas

  3. #83
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    tu veux passer par des fichiers temporaires ou pas ?
    le but c'est de permettre de crypter et compresser en une fois ?

  4. #84
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Par défaut
    le but c'est créer une application qui compresse/decompresse des fichiers, crypte/decrypte des fichiers
    donc ces deux fonctions ne sont pas liées forcément

    pour l'instant le cryptage/decryptage ca marche !
    pour la compression /decompression non

  5. #85
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    l'exemple de la FAQ C++/CLI fonctionne très bien, comme le prouve ce code fait de copier-coller :
    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
    using namespace System;
    using namespace System::IO;
    using namespace System::IO::Compression;
     
    bool compresserFichier(String ^cheminSource, String ^cheminDestination)
    {
        try
        {
            // Le fichier est placé dans le FileStream
            FileStream ^ monFileStream = gcnew FileStream(cheminSource, FileMode::Open);
            cli::array<unsigned char,1> ^ monBuffer = gcnew cli::array<unsigned char>(safe_cast<int>(monFileStream->Length));
            // Lecture de l'intégralité du FileStream
            monFileStream->Read(monBuffer, 0, safe_cast<int>(monFileStream->Length));
            // Fermeture du FileStream
            monFileStream->Close();
            // Création du fichier qui va contenir le fichier compressé
            monFileStream = gcnew FileStream(cheminDestination, FileMode::Create);
            // Compression des données
            GZipStream ^monGZipStream = gcnew GZipStream(monFileStream, CompressionMode::Compress, false);
            // Ecriture des données compressées dans le fichier de destination
            monGZipStream->Write(monBuffer, 0, monBuffer->Length);
            // Fermeture du GZipStream
            monGZipStream->Close();
            return true;
        }
        catch(Exception ^e)
        {
            Console::WriteLine(e->Message);
            return false;
        }
    }				
     
    bool decompression(String ^cheminSource, String ^ cheminDestination)
    {
        /*cheminSource : chemin complet du fichier compressé
        cheminDestination : chemin complet du fichier où le fichier doit être décompressé*/
        try
        {
            // Lecture du fichier compresse
            FileStream ^monFileStream = gcnew FileStream(cheminSource, FileMode::Open);
            // Données du fichier placées dans un GZipStream
            GZipStream ^monGzipStream = gcnew GZipStream(monFileStream, CompressionMode::Decompress);
            // Tableau qui va contenir la taille du fichier
            array <unsigned char> ^tailleOctets = gcnew array<unsigned char>(4);
            // Positionnement dans le Stream pour récupérer la taille
            int position = safe_cast<int>(monFileStream->Length) - 4;
            monFileStream->Position = position;
            // Récupération de la taille du fichier
            monFileStream->Read(tailleOctets, 0, 4);
            // Repositionnement en début du Stream
            monFileStream->Position = 0;
            // Conversion de la taille du fichier en entier
            int tailleFichier = BitConverter::ToInt32(tailleOctets, 0);
            // Dimesionnement du buffer
            array<unsigned char> ^buffer = gcnew array<unsigned char>(tailleFichier + 100);
            // Offset qui permettra de se repérer dans le Stream
            int monOffset = 0;
     
            while (true)
            {
                // Les données sont décompressées et placées dans le buffer
                int decompressionOctets = monGzipStream->Read(buffer, monOffset, 100);
                // Tant qu'il reste des données on continue
                if (!decompressionOctets)
                    break;
                //  On icrémente l'offset pour ne pas repartir de 0 à chaque fois...
                monOffset += decompressionOctets;
             }
     
            // Création du fichier décompressé
            monFileStream = gcnew FileStream(cheminDestination, FileMode::Create);
            // Ecriture des données décomrpessées dans le fichier
            monFileStream->Write(buffer, 0, tailleFichier - 1);
            // Efface les données en mémoire tampon
            monFileStream->Flush();
            // Fermeture des Streams
            monFileStream->Close();
            monGzipStream->Close();
            return true;
        }
        catch(Exception ^e)
        {
            Console::WriteLine(e->Message);
            return false;
        }
    }		
     
     
    int main(array<System::String ^> ^args)
    {
    	if (!compresserFichier("c:\\test.txt", "c:\\test.gzip"))
    		Console::WriteLine("erreur de compression");
    	if (!decompression("c:\\test.gzip", "c:\\test2.txt"))
    		Console::WriteLine("erreur de décompression");
        return 0;
    }

  6. #86
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Par défaut
    est ce que tu peux m'expliquer ce qui ce passe dans le main ?
    par exemple cette partie du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     if (!compresserFichier("c:\\test.txt", "c:\\test.gzip"))
    		Console::WriteLine("erreur de compression");
    merci

  7. #87
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    j'appelle la fonction compresserFichier qui prend en paramètres 2 chaines, ces chaines représentant le fichier à compresser et le nom du fichier résultat compresser.
    Si la fonction renvoi false, alors j'affiche une erreur

  8. #88
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Par défaut
    c'es parce que j'avais fait le même code sauf que dans le main j'avais mis juste ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    compresserFichier("c:\\test.txt", "c:\\test.gzip");
    à la place de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if (!("c:\\test.txt", "c:\\test.gzip"))
    Console::WriteLine("failure in compression");
    et ca marchait pas !
    par contre j'ai essayé ton dernier code ..ca marche !

    merci

  9. #89
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Par défaut
    En fait j'ai une autre question
    j'ai besoin d'un algorithme de clé publique(par exemple RSA ) pour générer des clés.
    j'ai essayé de voir l'aide (msdn).. mais je suis vraiment perdu
    est ce que t as un exemple d'utilisation de cette classe RSA ?
    merci

  10. #90
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    c'est pas si compliqué que ca ...
    le seul truc un peu délicat, c'est la génération des clés publiques et privées, si tu as besoin de les sauver

  11. #91
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Par défaut
    ben justement c'est la génération des clés que je cherche ?

  12. #92
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    tu peux t'inspirer de ce qui a été fait ici http://www.codeproject.com/dotnet/RSACryptoPad.asp

  13. #93
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Par défaut
    ok ..merci
    j'ai une autre question :
    je veux définir des groups d'utilisateurs , par exemple que je définis 3 groupes:
    -groupe1(niveau elevé)
    -groupe2(niveau moyen)
    -groupe3(niveau inférieur)

    par exemple si un fichier est crypter par un membre du groupe3 , tout le monde peut le décrypter, un fichier crypté par un membre du groupe 2 , de peut être decrypté que par un membre du groupe 2 ou du groupe 3

    est ce que t'a une idée comment je pourrais faire ca ?
    autre chose pour par exemple ne donner que le droit de lecture (read only) ou le droit de la lecture et l'ecriture à l'utilisateur ?

    est ce que tu as une idée comment on pourrait faire cela?

    merci

  14. #94
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Par défaut
    J'ai pensé à créer une BDD avec 2 tables :
    -l'une avec le nom et le password
    -l'autre avec le niveau de sécurité
    et en fonction du niveau de sécurité de chaque utilisateur je pourrais lui attribuer les permissions voulues

    est ce que tu as une idée comment je pourrais faire cela ?

    merci

  15. #95
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Par défaut RSA/Rijndael
    voila je suis un peu perdu là.
    pour Rijndael, une clé suffit pour à la fois crypter et decrypter.
    Par contre pour RSA il faut tjrs générer à chaque fois une paire de clés(une privée et l'autre publique).
    voila j'ai vu le code que tu m'a donné :

    http://www.codeproject.com/dotnet/RSACryptoPad.asp

    le problem c'est qu'il n y a que deux fonctions, une qui encrypte et l'autre qui decrypte
    je comprend pas où est ce que la paire des clés (privée et publique) est générée ??

    merci

  16. #96
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    dans cet exemple il te génère 2 fichiers au moment du cryptage
    et tu dois en utiliser 1 pour décrypter

  17. #97
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Par défaut
    j'ai pas bien compris
    est ce que tu peux me detailler un peu plus stp
    merci

  18. #98
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414

  19. #99
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    326
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 326
    Par défaut
    le principe je le connait
    par contre les fichiers qu'il genere au moment du cryptage , ca correspond à quoi?
    et comment j utilise qu'un seul au moment du decryptage??

  20. #100
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    ben, y a la clé publique de la clé privée

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

Discussions similaires

  1. [MSChart] creation de courbe sous visual C++
    Par gabriel knight dans le forum MFC
    Réponses: 5
    Dernier message: 18/09/2006, 14h32
  2. Impression sous visual c++
    Par zeze511 dans le forum MFC
    Réponses: 2
    Dernier message: 16/02/2004, 12h02
  3. problème de compilation sous visual C++
    Par fabmili dans le forum MFC
    Réponses: 4
    Dernier message: 08/02/2004, 19h52
  4. Réponses: 3
    Dernier message: 28/01/2004, 10h46
  5. Deplacer un curseur dans un RichEdit sous visual c
    Par tweek dans le forum Windows
    Réponses: 7
    Dernier message: 14/01/2004, 00h29

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