je cherche � compresser puis � crypter
Version imprimable
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:aie:
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:
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 :aie:Code:
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 deCode:
1
2 compresserFichier("c:\\test.txt", "c:\\test.gzip");
et ca marchait pas !Code:
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 :aie:
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:aie:
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 ?:mouarf:
tu peux t'inspirer de ce qui a �t� fait ici http://www.codeproject.com/dotnet/RSACryptoPad.asp
ok ..merci :king:
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 :aie:
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
c'est le principe de RSA : http://fr.wikipedia.org/wiki/Rivest_Shamir_Adleman
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