je cherche à compresser puis à crypter
je cherche à compresser puis à crypter
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![]()
tu veux passer par des fichiers temporaires ou pas ?
le but c'est de permettre de crypter et compresser en une fois ?
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
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; }
est ce que tu peux m'expliquer ce qui ce passe dans le main ?
par exemple cette partie du code :
merci
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");![]()
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
c'es parce que j'avais fait le même code sauf que dans le main j'avais mis juste ca
à la place de
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 compresserFichier("c:\\test.txt", "c:\\test.gzip");
et ca marchait pas !
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");
par contre j'ai essayé ton dernier code ..ca marche !
merci![]()
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
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
ben justement c'est la génération des clés que je cherche ?![]()
tu peux t'inspirer de ce qui a été fait ici http://www.codeproject.com/dotnet/RSACryptoPad.asp
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![]()
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
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
dans cet exemple il te génère 2 fichiers au moment du cryptage
et tu dois en utiliser 1 pour décrypter
j'ai pas bien compris![]()
est ce que tu peux me detailler un peu plus stp
merci
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??
ben, y a la clé publique de la clé privée
Partager