I. Înțelegerea originii și a impactului datelor duplicate
În primul rând, trebuie să înțelegem de ce apar atât de multe date duplicate. În timpul construirii fișierului de dicționar, este posibil să se colecteze date din mai multe surse, care pot avea suprapuneri parțiale. De exemplu, la colectarea de date din diferite liste de cuvinte, seturi de parole obișnuite, liste de combinații de caractere etc., unele cuvinte de bază sau combinații simple de parole pot exista în mai multe surse.
Aceste date duplicate au multe efecte negative. Din punct de vedere al stocării, un spațiu de 2 TB este deja foarte mare și, dacă există o mulțime de conținuturi duplicate, reprezintă o pierdere de spațiu de stocare prețios. În timpul utilizării practice a fișierului de dicționar pentru spargerea parolelor sau alte operațiuni, conținutul duplicat duce la căutări și comparații inutile. De exemplu, dacă în procesul de spargere a parolelor, algoritmul trebuie să compare fiecare linie din dicționar cu parola țintă, conținutul duplicat va mări numărul de comparații, încetinind astfel întregul proces de spargere a parolelor.
II. Metode de filtrare bazate pe instrumente de procesare a textului
Utilizarea instrumentelor din sistemul Windows
- Utilizarea PowerShell
- În sistemul Windows, PowerShell oferă funcții bogate de procesare a textului. Putem folosi următorul script PowerShell pentru a elimina liniile duplicate:
```powershell
$lines = Get - Content "dictionary.txt"
$uniqueLines = @()
foreach ($line in $lines) {
if ($uniqueLines -notcontains $line) {
$uniqueLines += $line
}
}
$uniqueLines | Set - Content "unique_dictionary.txt"
```
Acest script citește, în primul rând, toate liniile din „dictionary.txt” într-o matrice „$lines”. Apoi, printr-o buclă, parcurge fiecare linie și, dacă o linie nu se află în noua matrice „$uniqueLines”, o adaugă în această nouă matrice. În final, salvează conținutul noii matrice în „unique_dictionary.txt”.
Algoritmul de divizare și cucerire
- Deoarece dicționarul nostru este foarte mare (2 TB), procesarea directă ar putea duce la probleme precum lipsa de memorie. Algoritmul de divizare și cucerire poate rezolva foarte bine această problemă. Putem diviza acest fișier mare în mai multe sub-fișiere mai mici. De exemplu, îl putem diviza în funcție de un anumit număr de linii sau de dimensiunea fișierului.
- Apoi, filtrăm repetările pentru fiecare sub-fișier în parte. Reunim apoi sub-fișierele procesate într-un singur fișier. În timpul reunirii, trebuie să verificăm din nou dacă există conținuturi duplicate, deoarece pot exista conținuturi identice între diferite sub-fișiere.
IV. Verificarea rezultatelor filtrării
După finalizarea filtrării repetărilor, trebuie să verificăm dacă rezultatele sunt corecte. Putem folosi câteva metode simple, cum ar fi extragerea aleatorie a unor linii și verificarea apariției lor atât în fișierul original, cât și în cel filtrat. Dacă apar de mai multe ori în fișierul original, dar o singură dată în cel filtrat, înseamnă că filtrarea a fost eficientă.
În plus, putem compara dimensiunea fișierului original cu cea a fișierului filtrat. Dacă dimensiunea fișierului filtrat este semnificativ mai mică și funcționează normal în testele ulterioare (cum ar fi utilizarea acestui fișier de dicționar pentru o simplă căutare de parole, pentru a verifica dacă funcționează corect și nu au fost omise parolele care ar fi trebuit să fie acolo), putem concluziona că filtrarea repetărilor a avut un rezultat bun.
Serverul nostru are 512 GB de memorie și servere cu disc SSD de mare viteză, iar după o jumătate de lună de muncă, am reușit să procesăm cu succes și am descoperit un set de scripturi de procesare eficiente. Pentru orice tip de cerere, puteți contacta serviciul clienți al site-ului pentru a discuta despre problemele întâmpinate în timpul filtrării repetărilor și despre scriserea scripturilor de procesare automată!
Filtrarea conținutului duplicat dintr-un fișier de dicționar de tip text de 2 TB este o sarcină dificilă, dar necesară. Prin selectarea judicioasă a instrumentelor și algoritmilor, putem elimina eficient conținutul duplicat și îmbunătăți calitatea și eficiența utilizării fișierului de dicționar, indiferent dacă este folosit pentru spargerea parolelor sau în alte scenarii care implică acest fișier de dicționar.