I. Zrozumienie źródeł i skutków powtórzeń
Najpierw musimy zrozumieć, dlaczego powstaje tak wiele powtórzeń. Podczas tworzenia pliku słownikowego dane są gromadzone z różnych źródeł, pomiędzy którymi istnieją częściowe nakładania się. Na przykład podczas gromadzenia danych z różnych słowników, zbiorów haseł lub list kombinacji znaków niektóre podstawowe słowa lub proste kombinacje haseł mogą występować w wielu źródłach.
Te powtórzenia mają wiele negatywnych skutków. Z punktu widzenia przechowywania danych 2 terabajty to już bardzo dużo miejsca, a jeśli zawierają one wiele powtórzeń, to oznacza to marnowanie cennej przestrzeni dyskowej. Podczas używania pliku słownikowego do łamania haseł lub innych operacji powtórki mogą prowadzić do niepotrzebnych wyszukiwań i porównań. Na przykład podczas łamania haseł algorytm musi porównywać każdy wpis w słowniku z hasłem docelowym, a powtórki zwiększają liczbę porównań, spowalniając cały proces.
II. Metody filtrowania za pomocą narzędzi do przetwarzania tekstu
Użycie narzędzi w systemie Windows
- Użycie PowerShella
- W systemie Windows PowerShell oferuje bogate możliwości przetwarzania tekstu. Możemy użyć następującego skryptu PowerShella do usunięcia duplikatów wierszy:
```powershell
$lines = Get - Content "dictionary.txt"
$uniqueLines = @()
foreach ($line in $lines) {
if ($uniqueLines -notcontains $line) {
$uniqueLines += $line
}
}
$uniqueLines | Set - Content "unique_dictionary.txt"
```
Ten skrypt najpierw odczytuje wszystkie wiersze z pliku „dictionary.txt” do tablicy „$lines”. Następnie w pętli przetwarza każdy wiersz i dodaje go do nowej tablicy „$uniqueLines”, jeśli nie występuje już w niej. Na koniec zapisuje zawartość nowej tablicy do pliku „unique_dictionary.txt”.
Algorytm podziału
- Ponieważ nasz plik słownikowy jest bardzo duży (2 TB), bezpośrednie przetwarzanie może powodować problemy z niewystarczającą ilością pamięci itp. Algorytm podziału może być doskonałym rozwiązaniem tego problemu. Możemy podzielić duży plik na kilka mniejszych podplików. Na przykład możemy go podzielić według określonej liczby wierszy lub rozmiaru pliku.
- Następnie każdy podplik jest przetwarzany osobno w celu usunięcia duplikatów. Przetworzone podpliki są ponownie scalane w jeden plik. Podczas scalania należy ponownie sprawdzić, czy nie ma duplikatów, ponieważ mogą one występować w różnych podplikach.
IV. Sprawdzenie wyników filtrowania
Po zakończeniu filtrowania musimy sprawdzić, czy wyniki są poprawne. Można to zrobić na kilka sposobów, na przykład poprzez losowe wybieranie wierszy i sprawdzanie, jak często występują w oryginalnym pliku i w pliku po filtrowaniu. Jeśli w oryginalnym pliku występują kilka razy, a w pliku po filtrowaniu tylko raz, oznacza to, że filtrowanie było skuteczne.
Ponadto można porównać rozmiar pliku oryginalnego z rozmiarem pliku po filtrowaniu. Jeśli plik po filtrowaniu jest znacznie mniejszy od oryginalnego i działa prawidłowo w kolejnych testach (na przykład przy użyciu tego pliku słownikowego do wyszukiwania haseł i sprawdzania, czy wszystkie hasła są poprawnie uwzględnione), oznacza to, że filtrowanie przebiegło skutecznie.
Nasz serwer wyposażony jest w pamięć o pojemności 512 GB i dyski SSD z protokołem NVMe. Po poświęceniu pół miesiąca udało nam się go skonfigurować i opracować wydajny skrypt przetwarzania. Jeśli masz podobne wymagania, możesz skontaktować się z obsługą klienta w celu omówienia szczegółów lub uzyskania pomocy w pisaniu automatycznych skryptów przetwarzania!
Filtracja duplikatów w pliku tekstowym zawierającym dwa terabajty danych to trudne, ale niezbędne zadanie. Dzięki właściwemu doborowi narzędzi i algorytmów możemy skutecznie usunąć duplikaty i poprawić jakość oraz wydajność pliku słownikowego, co ma znaczenie zarówno przy łamaniu haseł, jak i w innych aplikacjach wykorzystujących ten plik słownikowy.