2012-07-26 10 views
6

Szukam składnika lub innej techniki kompresowania i szyfrowania wielu dużych plików (pliki przekraczające rozmiar 4 gb, a zatem nie mieszczą się w pamięci dostępnej dla procesu win32) w jednym pliku. Chciałbym, aby szyfrowanie było bardzo silne (256 bitów AES lub lepiej), ale kompresja nie ma dla mnie znaczenia.Jak mogę skompresować i zaszyfrować duży plik bez korzystania z zewnętrznych bibliotek DLL lub środowisk wykonawczych?

W tej chwili używam komponentu TJvZlibMultiple, który tworzy własny format pliku spoza Zip, ale muszę utworzyć archiwum, a następnie zaszyfrować je w osobnym kroku (używam teraz DcpCrypt). Chciałbym zrobić to samo w jednym przebiegu, używając strumieni, bez użycia pamięci równej rozmiarowi pliku (ergo, kompresja i szyfrowanie powinny się zdarzyć ze strumieniami, a nie w pamięci).

Widziałem i nie chcę używać niczego, co wymaga zewnętrznych bibliotek DLL, takich jak dll 7zip. Komercyjne narzędzia są w porządku, albo jakikolwiek kod lub przykładowe źródła Delphi, ale szukam dokładnej implementacji w Delphi, a nie rzeczy, która importuje i wywołuje funkcje w bibliotece dll.

+4

Nie zgadzam się z 2 głosów do zamknięcia! (szczególnie bez żadnego wyjaśnienia). –

+0

@ François, dwa głosy były zarówno tym, że pytanie nie było konstruktywne, co w tym kontekście prawdopodobnie oznacza, że ​​sprzeciwili się nagabywaniu składników, ponieważ graniczy z pytaniem ankietowym. Zrobiłem to nieco dalej od tej granicy, prosząc o bardziej ogólne pytanie, jak osiągnąć wyznaczony cel, zamiast pytać o konkretny komponent. Większość odpowiedzi prawdopodobnie zasugeruje komponenty lub biblioteki. –

+1

Dzięki @RobKennedy. Wygląda rzeczywiście lepiej. –

Odpowiedz

2

Spójrz na DIZipWriter.

Obsługuje 256-bitową AES, strumieniowanie i kompresję.

Aktualizacja: Wersja 5 zapewnia wsparcie dla dużych (64-bitowych) wpisów, DIZipWriter History.

+0

Usunąłem flagę odpowiedzi z tego pytania, ponieważ chociaż ten komponent ma piękną obsługę szyfrowania, używa on Cardinal (32-bitowy) zamiast int64 dla parametrów wielkości pliku i pozycji, co oznacza, że ​​deweloper nie pomyślał o użyciu jego komponentu z plikami> 4 gb w rozmiarze. Ponieważ to była łatwa część, nie zacząłem nawet podejrzewać, że spartaczyłby tak łatwo. Ale patrząc na wersję do pobrania (która pozwala zobaczyć podpisy wszystkich interfejsów API), widzę, że nie jest ona gotowa na Duże pliki. –

-1

Sprawdź FlexCompress:

FlexCompress jest składnikiem kompresji Delphi przeznaczony do tworzenia archiwów z silnego szyfrowania i lepsze współczynnik kompresji niż WinZip i RAR. Natywny VCL, brak plików DLL, brak OCX, zapewnia kompresję plików, buforów, strumieni i łańcuchów, obsługuje archiwa w pamięci, kompresuje duże pliki> 4 Gb przy niskim zużyciu pamięci i wielu innych przydatnych funkcjach.

http://www.componentace.com/flexcompress_features.htm

przez ten link: http://delphi.about.com/od/toppicks/tp/delphi_zip.htm

+0

Już sugeruję powyżej. Powoduje duplikowanie odpowiedzi. Tylko głosuj proszę, –

Powiązane problemy