Jak zrobić, aby mój program potrafił zaszyfrować i odszyfrować pliki typu: zip i rar. Mam już napisane na XOR'ze że szyfruje i odszyfrowuje pliki txt i chce powiększyć go o tą pytaną funkcje. Program w C# (Windows Form Application).
No jak dla mnie, to dużej różnicy nie ma. Traktujesz i jedno i drugie jak tablicę (stream) bajtów, tak?
Wróżka Elwira by się przydała...
Chodzi ci o funkcjonalność wbudowaną w specyfikację plików zip/rar, funkcjonalność wbudowaną w .NET czy twoją własną metodę szyfrowania...?
Chodzi mi głównie o jakiś kod programu który umie szyfrować i odszyfrować dane w rar i zip za pomocą XOR. Chce to zrobić tak: wybieram lokalizacje pliku rar lub zip podaje jakąś tam cyfrę np.10 i klikam zaszyfruj dane. I mam zaszyfrowane archiwum. Podobnie chcę tak zrobić w drugą stronę.
Czyli ma rozpakować archiwum, zaszyfrować dane i spakować je z powrotem?
Wiesz co Wibowit właśnie o to chodzi. I w drugą stronę tak samo.
Do ZIPa powinny być jakieś darmowe komponenty (przynajmniej jeżeli chodzi o metodę kompresji Deflate32 lub brak kompresji), ale RAR już jest formatem własnościowym i nie ma darmowych kompresorów do RARa (tzn nawet jeśli są to autorzy muszą zapłacić za licencje).
Jak to zrobić, ma jakiś ktoś pomysł? :)
Czy nikt nie może mi pomoc :(
Powiedziałbym raczej, że nikt nie chce, bo nikt nie wie o co ci chodzi.
Czyli tak:
Chcesz wypakować pliki z archiwum zip lub rar.
Każdy plik jakoś tam zakodować.
Spakować pliki z powrotem do zip lub rar.
Tylko po co ?
Nie lepiej zakodować całe archiwum ?
A może wystarczy odpalić z programu tego obrzydliwego WinRARa z odpowiednimi parametrami?
Wolałbym żeby to mój program szyfrował i odszyfrowywał rar i zip, a nie winrar.
Problem w tym że mam wrażenie że ty nadal nie wiesz czego chcesz...
Tak jak pisałem, masz 3 możliwości:
-
Szyfrowanie plików ZIP zgodnie z ich formatem. Wtedy otrzymasz pełnoprawne spakowane archiwum (np. programy będą wiedziały że jest skompresowane). Najprościej do tego użyć którejś z gotowych bibliotek typu http://dotnetzip.codeplex.com/ albo http://www.icsharpcode.net/opensource/sharpziplib/ (tutaj przykład: http://www.componentace.com/zip-aes-encryption-c-sharp.htm)
-
Szyfrowanie całych plików ZIP za pomocą tego twojego XOR-a - poglądowo (pseudokod pisany z palca, w miarę zgodny z kodem C#):
byte[] key = new byte[] {0xAB, 0xBC, 0xCD, 0xDE, 0xEF, 0xFA, 0x12, 0x23};
FileStream file = File.Read("zipfile.zip");
byte[] buffer = new byte[file.Length];
file.ReadAllBytes(0, buffer, file.Length);
for(int i = 0; i < buffer.Length; i++)
{
buffer[i] ^= key[i%key.Length];
}
// + wpisanie zawartości zaszyfrowanej do nowego pliku czy co tam chcesz.
2a - szyfrowanie zawartości tych plików ZIP (dalej pozostają prawidłowymi plikami ZIP)
To samo co 2 tylko używając dodatkowo GZipStream http://msdn.microsoft.com/en-us/library/system.io.compression.gzipstream.aspx
3 - szyfrowanie za pomocą frameworkowych metod a nie XOR-a
tak jak w 2, tylko zamiast for trzeba dać
var provider = new System.Security.Cryptography.RSACryptoServiceProvider();
provider.ImportParameters(your_rsa_key);
byte[] encryptedBytes = provider.Encrypt(buffer, true);
3a - Tak jak 3, zmiana analogicznie jak w 3.
Właśnie chodziło mi o tą 2. tylko tera podkreśla mi na czerwono: file.ReadAllBytes i File.Read.
Wystarczyłoby byte[] buffer = File.ReadAllBytes("zipfile.zip");